Несколько раз встречался с ситуацией, когда один из пользователей Windows Server с ролью RDS (Remote Desktop Services) запустил приложение, которое утекло и заняло всю доступную RAM. Удаленно подключиться к такому хосту по RDP невозможно. Чтобы завершить утекший процесс, нужно выполнить удаленный логофф пользователя. Для этого можно использовать встроенную команду logoff
.
Синтаксис команды logoff.exe:
logoff /server:<servername> <session ID> /v
Команда logoff принимает ID сессии пользователя, которую нужно завершить. Чтобы вывести список активных сеансов пользователей на удаленном компьютере, выполните команду:
quser /server:RemoteComputerName
USERNAME SESSIONNAME ID STATE IDLE TIME LOGON TIME admin console 1 Active none 1/25/2023 1:23 PM
В данном случае на компьютере выполнен локальный вход (console) под пользователем admin. ID этой сессии равно 1.
Можно получить ID сессии определенного пользователя:
quser /server:RemoteComputerName sidorov
Вы можете удаленно завершить сеанс пользователя по его ID сессии. Выполните команду:
logoff 1 /SERVER:RemoteComputerName /v
Logging off session ID 1
При завершении сеанса пользователя, будут завершены все его запущенные процессы.
Проверьте, что на удаленном компьютере не осталось активных сессий:
quser /server:RemoteComputerName
No User exists for *
Можно использовать небольшой скрипт, чтобы завершить все сеансы пользователей на нескольких терминальных серверах:
@echo off
setlocal
set servers=MSKRDS1 MSKRDS2
for %%s in (%servers%) do (
qwinsta /server:%%s | for /f "tokens=3" %%i in ('findstr /I "%username%"') do logoff /server:%%s %%i /v
)
Также для удаленного завершения сессий пользователей можно использовать встроенную утилиту rwinsta:
rwinsta rdp-tcp#12 /server:MSKRDS2
или
rwinsta 22 /server:MSKRDS2