Ending disconnected sessions on a terminal server
Отключенные сеансы на терминальном сервере продолжают потреблять ресурсы и другие пользователи, кому вдруг захотелось поработать могут чувствовать себя не комфортно, так как их любимый отчет в 1С перестал формироваться и выдает 100500 ошибок. Что не удивительно, потому что вся оперативная память занята сеансами отключенных пользователей.
И если системный администратор (ленивая жопа) вовремя не настроил при помощи групповых политик таймауты отключения завершенных сеансов, как описано, например, здесь – ссылка, то можно настроить данный процесс при помощи небольшого bat скрипта, который нужно будет запускать планировщиков примерно 1 раз в пару часов.
Листинг скрипта
Открываем любой нормальный текстовый редактор (хотя бы Notepad++), вставляем в него такой код и сохраняем с расширением *.bat, например logoff_users.bat:
query session > C:/logoff.txt FIND /V "rdp-tcp#" C:/logoff.txt > C:/logoff2.txt for /F "skip=2 tokens=2," %%i in (C:/logoff2.txt) DO (IF NOT %%i==0 (IF NOT %%i==65536 logoff %%i) )
Как может заметить любопытный читатель – в скрипте всего три строки кода, что делает его почти идеальным. Давайте разберемся, что же происходит.
1). Сначала сохраняем список сессий пользователей не терминальном сервере в текстовый файл C:/logoff.txt
Видим, что у отключенного пользователя в колонке СЕАНС отсутствует rdp-tcp#… – по этому признаку и будем отбирать отключенных пользователей.
2). Переписываем текстовый файл C:/logoff.txt в другой текстовый файл C:/logoff2.txt но без строк, в которых встречается “rdp-tcp#”, теперь в тектовом файле остался только отключенный пользователь и две строки служебных подключений, которые мы трогать не будем:
3). В третьей строке скрипта осуществляется перебор строк файла C:/logoff2.txt колонки ID (айди сеанса), и если айди сеанса не равно 0 или 65536 – осуществляем выход пользователя командой logoff, передав ей в качестве параметра айди сеанса.
Планировщик
Теперь осталось в планировщике Windows создать задачу, которая время от времени будет запускать данный скрипт и “очищать сервер” от зависших сессий.
Не забудьте поставить галочку “запускать с наивысшими правами” и “вне зависимости от регистрации пользователя”
Более правильные методы завершения отключенных сеансов
На самом деле более правильным решением будет все же настроить таймауты сессий в настройках RDS или при помощи локальных групповых политик.
Описанное выше решение скорее подойдет в таких случаях, когда вы не хотите ограничивать клиентов в ресурсах по ночам (в непродуктивное время), но хотите, чтобы днем, при полной загрузке RDP сервера, все свободные ресурсы были предоставлены активным пользователям.
Ну или вы хотите нажатием одной кнопки “очищать” сервер от нерадивых отключенных пользователей.
No one has posted here yet.