Автоматическое завершение сессии терминального сервера по имени пользователя
Пролог На терминальном сервере Windows Server зарегистрировано 9 пользователей с именами user1..user9 , через rdp к ним подключаются терминалы на базе thinstation. Необходимо через командную строку, либо через задание по времени — выключать терминалы и завершать сессии по имени пользователя.
Хронология Существует команда logoff, но по некоторым параметрам она не подходит, воспользуемся командой reset session. Разница между ними такова
Цитата из саппорта микрософт:
«An administrator has the option to either reset or logoff existing Terminal Server sessions. The differences between these options are:
1. Logging off from a session will tell the session to log off normally. Applications will be closed. The user profile will be written. Application data could be lost, however.
2. Resetting a session frees it immediately. You lose all user profile changes. Applications are not terminated gracefully, and you lose data.»
Приблизительный смысл logoff выходит из сессии корректно с завершением приложений и пользовательских настроек, reset session напротив рвет сессию без сохранения данных. Тут как раз тот случай, когда приложение, запущенное в качестве оболочки, подвисает, и logoff будет ожидать его завершения по максимальному таймауту системы, а может и вовсе не завершиться. Reset session не понимает user name, справка windows дает следующую информацию:
C:\Users\User4\reset session /? Сброс значений подсистем оборудования и программ сеанса в начальное состояние. RESET SESSION {sessionname | sessionid} [/SERVER:servername] [/V] sessionname Задает имя сеанса. sessionid Задает сеанс с идентификатором ID. /SERVER:сервер Сервер терминалов (по умолчанию текущий). /V Вывод подробной информации.
Решение проблемы сводится к определению sessionname или sessionid по username. Узнать полную информацию об открытых сессиях rdp можно командой query user:
C:\Documents and Settings\User4\query user ПОЛЬЗОВАТЕЛЬ СЕАНС ID СТАТУС БЕЗДЕЙСТВ. ВРЕМЯ ВХОДА user4 rdp-tcp#27 1 Активно . 18.01.2013 1:58 user6 rdp-tcp#22 2 Активно . 18.01.2013 2:01 user5 rdp-tcp#23 3 Активно . 18.01.2013 2:01 user8 rdp-tcp#20 5 Активно . 18.01.2013 2:01 user7 rdp-tcp#19 8 Активно . 18.01.2013 2:17 user9 rdp-tcp#21 4 Активно . 18.01.2013 2:18 user2 rdp-tcp#26 10 Активно 6:36 18.01.2013 10:08 user1 rdp-tcp#25 6 Активно 6:40 18.01.2013 14:40 user3 rdp-tcp#31 7 Активно 7 19.01.2013 16:36
Но sessionname в данном контексте не совсем корректно, потому как, если сессию закрыть(именно закрыть, а не выйти), сессия останется висеть, но sessionname у неё не будет. На основании выше изложенного собран bat скрипт — ищет соотношение username во всех открытых на компьютере rdp сессиях и рвет искомую по id.
Ниже указан частный пример скрипта для перезагрузки станций thinstation зная ip и одновременном закрытии сессий на сервере терминалов.
set ident=%1 C:\"Program Files"\PuTTY\plink.exe -ssh root@192.168.1.%ident% -pw 111111 -m C:\reboot set USER=user%ident% for /f "tokens=1,2,3" %%i in ('query user') do ( if %%i==%USER% reset session %%k)
Вызов производится по части имени, которая передается bat файлу и части ip адреса,т.е. «new.bat 8» будет справедлив для имени пользователя User8 с ip адресом станции thinstation 192.168.1.8.
Универсальный скрипт для выкидывания пользователя по имени будет выглядеть так
set USER=%1 for /f "tokens=1,2,3" %%i in ('query user') do ( if %%i==%USER% reset session %%k)
Сборка Thinstation 5.1 для ASUS M2N-MX SE Потеря знаков сканером штрих кодов ZEBEX
Приветствую! у меня настроен аналогичный скрипт, который работал стабильно долгое время, а с недавних пор стал выдавать следующее сообщение:
Если выполнить сброс сеанс, все пользователи, использующие этот протокол, будут отключены. Продолжить (Нет=N)?
ОС Windows 2003 Server R2 SP2
Скрипт запускается под админом.
Если сталкивались с этой проблемой напишите плиз!
После сообщения обычно код ошибки, либо в логах ошибка. Возможно какое то ПО не дает сессии завершиться. Необходимо отслеживать что поменялось за последнее время: дополнительное ПО, замена сетевых интерфейсов или драйверов на них, установка обновлений ПО связанных с RDP или сетевыми драйверами. Возможно мешает KB971143.