一部の条件下では、管理者は、現在リモート デスクトップ サーバーにログオンしているすべてのユーザーのログオフを強制することができます。 これを行うには、バッチ ファイルまたは PowerShell スクリプトを使用します。
警告
次の手順を実行すると、現在リモート デスクトップ サーバーにログオンしているすべてのユーザーがログオフします。 これにより、保存されていないデータが失われる可能性があります。 このため、細心の注意が必要です。
元の KB 番号: 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
このバッチ ファイルは、管理者がリモート デスクトップ サーバー コンソールにログオンしていないすべてのユーザーのログオフを強制する場合にいつでも実行できます。
クエリは、リモート デスクトップ サーバー環境内で見つかった多目的コマンドです。 この場合、クエリ セッションは、セッション ID 番号を含む、リモート デスクトップ サーバーで実行されているすべてのセッションの一覧を作成します。 バッチ ファイル内では、この出力はテキスト ファイルにリダイレクトされます。 FOR ステートメントは、テキスト ファイルの各行を解析し、最初の行をスキップして、3 番目の列にあるセッション ID 番号を探します。 次に、この変数をログオフに配置し、その結果、そのセッションがログオフされます。
このバッチ ファイルを実行すると、エラー メッセージが表示されることがよくあります。 ユーザーがリモート デスクトップ サーバー コンソールにログオンすると、次のエラー メッセージが生成されます。
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 ファイルの最初の 2 行がスキップされ、エラーが回避されます。