Лимит 20 подключений к сетевой папке: проблемы и решения

Всем привет! Как-то столкнулся с ошибкой подключения к сетевой папке: через какое-то количество пользователей переставало пускать к расшаренной папке. Вместо этого пользователь получает ошибку:

Windows не удается подключиться к папке. Дополнительные подключения к этому удаленному компьютер сейчас невозможны, так как их число достигло предела.

Оказывается, в десктопных редакциях Windows есть жесткое ограничение на максимальное количество одновременных сетевых подключений с других компьютеров. Так, например Window 10 и 11 (независимо от редакции) поддерживают только 20 одновременных сессий. Если подключений больше — добро пожаловать на Windows Server. А это, как говорится, совсем другая история другие деньги.

В пользовательском лицензионном соглашении (EULA)Windows 10 указано, что к компьютеру смогут одновременно подключиться не более 20 устройств (CAL):

Подключение устройств. К программному обеспечению, установленному на лицензированном устройстве, могут иметь доступ до 20 других устройств в целях использования следующих функций программного обеспечения: файловых служб, служб печати, служб IIS и служб общего доступа к подключению Интернета, а также служб телефонии на лицензированном устройстве. Вы можете разрешить любому количеству устройств обращаться к программному обеспечению, установленному на лицензированном устройстве, для синхронизации данных между устройствами.

Таким образом Microsoft ограничивает возможно использования десктопных редакций Windows в качестве полноценного сервера.

Лимит на количество входящих сессий в Windows можно получить с помощью команды:

net config server

Примечание: в Windows Server максимально число подключений намного больше – 16777216.

Также обратите внимание на значение параметра Idle session time (min) . По умолчанию компьютер будет отключать сессии неактивные более 15 минут.

Если вы хотите более агрессивно отключать неактивные сессии (например, уменьшив таймаут неактивности до 5 минут), выполните:

net config server /autodisconnect:5

Также при превышении количества одновременных подключений, вы можете отключить некоторые устройства вручную. Вывести список активных сетевых подключений к компьютеру:

net session

Отключить все активные сессии с компьютера (или IP адреса):

net session \\192.168.31.94 /d

Решение с помощью PowerShell

Если при достижении максимального количества подключений вы хотите автоматически отключать определенных клиентов, можно воспользоваться PowerShell скриптом. Ниже приведен пример простого PowerShell скрипта, которые получает список активных сессий и при достижении 19 подключений, отключает 2 сессии с самыми большими таймаутами (но вы можете использовать свою логику).

$number_of_old_sessions_to_kill=2
$output = net session | Select-String -Pattern \\
$CurConns= ($output| Measure-Object -Line).Lines
if ($CurConns -ge 19) {
    $sessions = @()
  $output | foreach {
        $parts = $_ -split "\s+", 4
        $session= New-Object -Type PSObject -Property @{
            Computer = $parts[0].ToString();
            Username = $parts[1];
            Opens = $parts[2];
            IdleTime = $parts[3];
        }
        $sessions += $session
    }
    $oldsessions=$sessions|Sort-Object -Property IdleTime -Descending | Select-Object -First $number_of_old_sessions_to_kill
    ForEach ($oldsession in $oldsessions) {
      net session $($oldsession.Computer) /d /y
    }
}

Такой PowerShell скрипт можно запускать через планировщик Windows каждые n-минут, чтобы он отключал простаивающие сессии.

Создаем в планировщике простую задачу

Во вкладке «Общая» пишим имя нашей задачи и выбираем условие выполнение задачи (от пределенного рользователя, от всех пользователей, выполнять с наивысшими правами).

Во вкладке «Триггеры» выбираем параметры запуска нашей задачи (время запуска, периодичность, повтор).

Во вкладке «Действия» выбираем «Запуск программы», в поле «Программа или сценарий» пишем powershell.exe.

В поле «Добавить аргументы» пишем

-ExecutionPolicy Bypass -NonInteractive -WindowStyle Hidden -File «d:\PS\19kill2.ps1

При запуске скрипта используются следующие опции:
-File – полный путь к файлу скрипта (PS1)
-ExecutionPolicy — позволяет задать настройки выполнения PowerShell скриптов для текущего сеанса. Когда указано Bypass, текущие настройки политики игнорируются и скрипт будет выполнен в любом случае;
-NonInteractive – не выводить интерактивные запросы к пользователю
-WindowStyle Hidden – не показывать окно консоли PowerShell пользователю (скрипт запускается скрыто). Если задание планировщика настроено на запуск при входе пользователя в систему, при запуске скрипт может появляться и пропадать окно PowerShell. Морганий не будет только со скриптами, которые запускаются в сеансе 0 (вне зависимости от входа пользователя);
-NoProfile — если скрипт может работать без использования профиля пользователя. Она предотвращает загрузку профиля пользователя, что ускоряет выполнение скрипта (, добавьте при необходимости).

Проверьте что задание появилось в консоли Планировщика задач. Чтобы протестировать работу задания, щелкните по нему и выберите Выполнить.

Если PowerShell скрипт был успешно запущен, в поле «Результат последнего запуска» появится сообщение Операция успешно завершена (0x0).

Спасибо: https://winitpro.ru/index.php/2024/06/19/ogranichenie-na-kolichestvo-setevyx-podklyuchenij-v-windows/, https://winitpro.ru/index.php/2024/09/10/zapusk-powershell-skripta-task-scheduler/

Размещено в Windows 10.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.