我正在寻找一种方法来关闭计算机(本地计算机)上所有活动的远程桌面会话。Windows 包含几个命令(rwinsta、qwinsta 等)来查看活动会话,但我看不出如何轻松使用这些信息(除非我解析字符串...)来关闭所有会话。
Powershell(或C#、Batch)中有没有办法关闭本地计算机上的所有远程桌面会话?
谢谢,马丁
我正在寻找一种方法来关闭计算机(本地计算机)上所有活动的远程桌面会话。Windows 包含几个命令(rwinsta、qwinsta 等)来查看活动会话,但我看不出如何轻松使用这些信息(除非我解析字符串...)来关闭所有会话。
Powershell(或C#、Batch)中有没有办法关闭本地计算机上的所有远程桌面会话?
谢谢,马丁
是的,从命令行使用 tsdiscon:
其中 n 应替换为会话 ID。
您可以从
既然您说要关闭本地计算机上的所有会话,我想您需要注意执行此操作的顺序(即最后关闭会话)。
您可以尝试使用未记录的
/sm
参数query session
(在批处理文件中)更轻松地对事物进行排序:您可以使用tsdiscon实用程序断开会话。如果您使用命令提示符中的“查询会话”命令,您可以查看 ID 列表,然后为每个 ID 发出一个 tsdiscon 命令。
像这样的循环结构应该可以工作
q.bat 在哪里
这只会断开远程会话并忽略控制台用户。
您可能需要查看 Powershell 社区扩展。它包括 Get、Stop 和 Disconnect TerminalSession cmdlet。
您可以使用 tsdiscon 断开本地或远程会话。
我发现 TSDISCON 不会删除“Disc”连接的会话。
我用注销替换了 TSDISCON。
您可以使用 PSTerminalServices PowerShell 模块:
http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2010/02/22/psterminalservices-powershell-module-for-terminal-services.aspx
Get-TSSession -ComputerName server1 -State Active | 断开连接-TSSession -WhatIf
我知道 OP 现在已经很老了,但这应该做你所追求的(如果其他人仍在寻找做同样的事情,我想我还是会回复)。
同样,您可以使用
query/reset session
代替q/rwinsta
...FOR /F %A IN (c:\scripts\ps\computers.txt) DO (FOR /f "tokens=2" %i IN ('qwinsta /SERVER:%A ^| find /i "disc"') **DO if "%i" NEQ "0" ECHO %i** | rwinsta %i /SERVER:%A /V)
TSDiscon 命令将断开终端服务 (RDP) 会话。单独使用将断开当前会话,您可以指定要断开的会话的会话 ID,也可以提供要断开的服务器名称。
完整的细节可以在这里找到。