Найти в Дзене
Заметки в сети

Как завершить RDP сеансы всех пользователей с помощью командной строки

При некоторых условиях администратору может потребоваться принудительно завершить сеанс всех пользователей, которые в данный момент вошли в систему на сервере удаленного рабочего стола. Это можно сделать с помощью пакетного файла или скрипта PowerShell. Чтобы завершить все сеансы пользователей, выполните следующие командлеты Powershell: $sessions = Get-RDUserSession foreach($session in $sessions) { Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionId -Force } Чтобы завершить только отключенные сеансы пользователей, выполните следующие командлеты Powershell: $sessions = Get-RDUserSession | ? {$_.SessionState -eq "STATE_DISCONNECTED"} foreach($session in $sessions) { Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionId -Force } Поместите следующую информацию в пакетный файл (.bat): query session >session.txt for /f "skip=1 tokens=3," %%i in (session.txt) DO logoff %%i del session.txt Этот пакетны
Оглавление

При некоторых условиях администратору может потребоваться принудительно завершить сеанс всех пользователей, которые в данный момент вошли в систему на сервере удаленного рабочего стола. Это можно сделать с помощью пакетного файла или скрипта PowerShell.

С помощью Powershell

Чтобы завершить все сеансы пользователей, выполните следующие командлеты Powershell:

$sessions = Get-RDUserSession
foreach($session in $sessions)
{
Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionId -Force
}

Чтобы завершить только отключенные сеансы пользователей, выполните следующие командлеты Powershell:

$sessions = Get-RDUserSession | ? {$_.SessionState -eq "STATE_DISCONNECTED"}
foreach($session in $sessions)
{
Invoke-RDUserLogoff -HostServer $session.HostServer -UnifiedSessionID $session.UnifiedSessionId -Force
}

С помощью батника (.bat)

Поместите следующую информацию в пакетный файл (.bat):

query session >session.txt
for /f "skip=1 tokens=3," %%i in (session.txt) DO logoff %%i
del session.txt

Этот пакетный файл может быть запущен в любое время, когда администратор захочет принудительно завершить сеанс всех пользователей, которые не вошли в консоль сервера удаленного рабочего стола.

Query — это многоцелевая команда, которая находится в среде сервера удаленного рабочего стола. В этом случае Query Session создает список всех сеансов, запущенных на сервере удаленного рабочего стола, с номерами идентификаторов сеансов. В пакетном файле этот вывод перенаправляется в текстовый файл. Затем оператор FOR анализирует каждую строку текстового файла, пропуская первую строку и находя номер идентификатора сеанса, найденный в третьем столбце. Затем он помещает эту переменную в Logoff, в результате чего сеанс завершается.

Иногда можно получить сообщение об ошибке при запуске этого пакетного файла. Если пользователь вошел в консоль сервера удаленного рабочего стола, генерируется следующее сообщение об ошибке:

Could not logoff session ID 0 from session Console, Error code 5
Error [5]: Access is denied.

Это связано с ограничением команды `Logoff`. Она не может принудительно завершить сеанс консоли. Чтобы обойти эту ошибку нужно внести изменения пакетного файла следующим образом:

query session >session.txt
for /f "skip=2 tokens=3," %%i in (session.txt) DO logoff %%i
del session.txt

Это приводит к пропуску первых двух строк файла Session.txt, что позволяет избежать ошибки.

Источник