![脚本 - 如何断开远程桌面会话?](https://linux22.com/image/488026/%E8%84%9A%E6%9C%AC%20-%20%E5%A6%82%E4%BD%95%E6%96%AD%E5%BC%80%E8%BF%9C%E7%A8%8B%E6%A1%8C%E9%9D%A2%E4%BC%9A%E8%AF%9D%EF%BC%9F.png)
我正在寻找一种方法来关闭计算机(本地计算机)上所有活动的远程桌面会话。 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 -ComputerName server1 -State Active | Disconnect-TSSession -WhatIf