我正在尋找一種方法來關閉電腦(本地電腦)上所有活動的遠端桌面會話。 Windows 包含幾個命令(rwinsta、qwinsta 等)來查看活動會話,但我不知道如何輕鬆使用這些資訊(除非我解析字串...)來關閉所有會話。
Powershell(或 C#、Batch)中有沒有辦法關閉本機上的所有遠端桌面工作階段?
謝謝,馬丁
答案1
您可以嘗試使用未記錄的/sm
參數query session
(在批次檔中)來更輕鬆地對事物進行排序:
FOR /f %%G IN ('query session /sm') DO tsdiscon %%G
答案2
是的,從命令列使用 tsdiscon:
tsdiscon n
其中 n 應替換為會話 ID。
您可以從以下位置取得會話編號
query session
既然你說你想關閉全部在本機上的會話,我想您需要注意執行此操作的順序(即最後關閉會話)。
答案3
您可以使用tsdiscon斷開會話的實用程式。如果您在命令提示字元下使用「查詢會話」命令,則可以查看 ID 列表,然後對每個 ID 發出 tsdiscon 命令。
像這樣的循環結構應該可以工作
FOR /f %%G IN ('q.bat') DO tsdiscon %%G
q.bat 是哪裡
query session /sm | find "Active"
這只會斷開遠端會話並忽略控制台使用者。
答案4
您可以使用 PSTerminalServices PowerShell 模組:
Get-TSSession -電腦名稱 server1 -狀態活動 |斷開-TSSession-WhatIf