При администрировании терминальных серверов на базе Windows довольно часто возникает необходимость завершить сеанс локального пользователя на удалённом терминальном сервере. Использование стандартных методов, таких как подключение к терминальному серверу и завершение сеанса пользователя через Диспетчер задач, может занять много времени, особенно если таких серверов несколько.
Для упрощения этой задачи можно воспользоваться альтернативным способом — созданием удобного скрипта на основе командной строки, который позволяет автоматически завершать сеансы пользователей на удалённых серверах.
Использование утилит logoff и qwinsta
Для завершения сеанса удалённого пользователя можно использовать утилиту командной строки logoff, которая предназначена для завершения сеансов на терминальных серверах. Однако, утилита требует указания идентификатора сеанса пользователя, а для его получения потребуется использовать другую утилиту — qwinsta.
qwinsta позволяет получить список всех сеансов, активных на сервере, и идентификатор каждого сеанса. Скомбинировав команды qwinsta и logoff в одном скрипте, можно автоматизировать процесс завершения сеансов пользователей на терминальных серверах.
Пример скрипта для завершения сеансов пользователей на терминальных серверах
Ниже приведён пример .bat скрипта, который позволяет завершать удалённые сеансы пользователей на указанных серверах. Перед использованием скрипта замените TERMSERV1 и TERMSERV2 на имена ваших терминальных серверов.
@echo off
setlocalset servers=TERMSERV1 TERMSERV2
for %%s in (%servers%) do (
qwinsta /server:%%s | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:%%s %%i /v
)
Описание работы скрипта
1. @echo off — отключает вывод команд на экран, чтобы интерфейс был более чистым и удобным для пользователя.
2. setlocal — начинает локальный сеанс переменных среды, чтобы изменения не влияли на общую среду.
3. set servers=TERMSERV1 TERMSERV2 — определяет список серверов, на которых будет выполнен скрипт. Замените TERMSERV1 и TERMSERV2 на имена ваших серверов.
4. Цикл for проходит по каждому серверу из списка servers и выполняет команду qwinsta для получения списка сеансов.
5. Команда findstr используется для поиска строки, содержащей имя пользователя (%username%), и извлекает идентификатор сеанса.
6. logoff завершает сеанс пользователя по полученному идентификатору.
Проверка и использование скрипта
Данный скрипт был протестирован на Windows XP, Windows 7 и Windows 10, при подключении к Windows Server 2008 R2. Он работает корректно и позволяет значительно ускорить процесс завершения сеансов удалённых пользователей на терминальных серверах.
Скрипт особенно полезен для системных администраторов, которым приходится регулярно управлять терминальными серверами и завершать сеансы пользователей вручную, что занимает много времени. С помощью этого скрипта вы можете автоматизировать данный процесс и сократить количество рутинных операций.