Поделиться через


Как выключить всех пользователей сеансов удаленного рабочего стола из командной строки

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

Предупреждение

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

Исходный номер базы знаний: 259436

Использование 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  

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

Запрос — это команда с несколькими целями, найденная в среде сервера удаленных рабочих столов. В этом случае сеанс запроса создает список всех сеансов, выполняемых на сервере удаленного рабочего стола, а также номера идентификатора сеанса. В пакетном файле выходные данные перенаправляются в текстовый файл. Затем инструкция 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, избегая ошибки.