Udostępnij za pośrednictwem


Jak wylogować wszystkich użytkowników sesji pulpitu zdalnego z poziomu wiersza polecenia

W niektórych warunkach administrator może wymusić wylogowanie wszystkich użytkowników aktualnie zalogowanych na serwerze pulpitu zdalnego. Można to zrobić przy użyciu pliku wsadowego lub skryptu programu PowerShell.

Ostrzeżenie

Wykonanie poniższej procedury spowoduje wylogowanie wszystkich użytkowników aktualnie zalogowanych na serwerze pulpitu zdalnego. Może to spowodować utratę niezapisanych danych. Z tego powodu zaleca się skrajną ostrożność.

Oryginalny numer KB: 259436

Korzystanie z programu PowerShell

Aby wylogować się ze wszystkich sesji użytkownika, uruchom następujące polecenia cmdlet programu PowerShell w brokerze połączeń:

$sessions = Get-RDUserSession

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

Aby wylogować się tylko z rozłączonych sesji użytkownika, uruchom następujące polecenia cmdlet programu PowerShell w brokerze połączeń:

$sessions = Get-RDUserSession |  ? {$_.SessionState -eq "STATE_DISCONNECTED"}

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

Używanie pliku wsadowego

Umieść następujące informacje w pliku wsadowym (.bat):

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

Ten plik wsadowy może być uruchamiany w dowolnym momencie administrator chce wymusić wylogowanie wszystkich użytkowników, którzy nie są zalogowani do konsoli serwera usług pulpitu zdalnego.

Zapytanie to wielofunkcyjne polecenie znalezione w środowisku serwera usług pulpitu zdalnego. W takim przypadku sesja zapytania tworzy listę wszystkich sesji uruchomionych na serwerze pulpitu zdalnego wraz z numerami identyfikatorów sesji. W pliku wsadowym dane wyjściowe są przekierowywane do pliku tekstowego. Instrukcja FOR analizuje następnie każdy wiersz pliku tekstowego, pomijając pierwszy wiersz i wyszukując numer identyfikatora sesji znajdujący się w trzeciej kolumnie. Następnie umieszcza tę zmienną w wylogowywane, co powoduje wylogowanie tej sesji.

Podczas uruchamiania tego pliku wsadowego nie jest rzadko wyświetlany komunikat o błędzie. Jeśli użytkownik jest zalogowany do konsoli serwera usług pulpitu zdalnego, zostanie wygenerowany następujący komunikat o błędzie:

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

Jest to spowodowane ograniczeniem Logoff polecenia. Nie może wymusić wylogowania sesji konsoli. Obejściem tego problemu byłoby zmodyfikowanie pliku wsadowego do odczytu:

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

Powoduje to pominięcie pierwszych dwóch wierszy pliku Session.txt, co pozwala uniknąć błędu.