Всем привет! Как-то столкнулся с ошибкой подключения к сетевой папке: через какое-то количество пользователей переставало пускать к расшаренной папке. Вместо этого пользователь получает ошибку:
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/





