脚本 – 如何断开远程桌面会话?

我正在寻找一种方法来closures计算机(本地计算机)上的所有活动的远程桌面会话。 Windows包括几个命令(rwinsta,qwinsta等)来查看活动会话,但是我看不到如何轻松地使用这些信息(除非我parsingstring…)来closures所有会话。

PowerShell(或C#,批处理)closures本地计算机上的所有远程桌面会话有没有办法?

谢谢,马丁

您可以尝试使用query session的未公开/sm参数(在batch file中)更容易地进行sorting:

 FOR /f %%G IN ('query session /sm') DO tsdiscon %%G 

是的,从命令行使用tsdiscon:

 tsdiscon n 

其中n应该被replace为会话ID。

你可以从中获得会话号码

 query session 

既然你说你想closures本地计算机上的所有会话,我想你需要小心你的操作顺序(即closures会话)。

你可能想看看Powershell社区扩展。 它包括获取,停止和断开TerminalSession cmdlet。

您可以使用tsdiscon实用程序来断开会话。 如果从命令提示符使用“查询会话”命令,则可以看到ID列表,然后为每个命令发出一个tsdiscon命令。

像这样的循环结构应该可以工作

 FOR /f %%G IN ('q.bat') DO tsdiscon %%G 

q.bat在哪里

 query session /sm | find "Active" 

这只会断开远程会话并忽略控制台用户。

您可以使用tsdiscon断开本地或远程会话。

 Disconnects a terminal session. TSDISCON [sessionid | sessionname] [/SERVER:servername] [/V] sessionid The ID of the session. sessionname The name of the session. /SERVER:servername Specifies the Terminal server (default is current). /V Displays information about the actions performed. 

我发现TSDISCON不会删除连接的会话中的“光盘”。

我用注销取代TSDISCON。

您可以使用PSTerminalServices PowerShell模块:

http://blogs.microsoft.co.il/blogs/scriptfanatic/archive/2010/02/22/psterminalservices-powershell-module-for-terminal-services.aspx

Get-TSSession – 计算机名称server1 – 状态活动| Disconnect-TSSession -WhatIf

我知道OP现在已经很老了,但是这样做应该可以做到你以后的事情(并且还没有其他人也在寻找相同的东西,我想我会回复的)。

同样,你可以使用query/reset session的地方q/rwinsta

 FOR /F %%A IN (computers.txt) DO ( FOR /f "tokens=2" %%i IN ('qwinsta /SERVER:%%A ^| find /i "disc"') DO ECHO %%i | rwinsta %%i /SERVER:%%A /V ) 

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命令将断开terminal服务(RDP)会话。 如果使用它自己将会抛弃当前会话,则可以指定要断开的会话的会话ID,也可以提供要断开连接的服务器名称。

完整的细节可以在这里find。

您没有指定是否要closures或重新启动计算机。 但是如果你不介意重启或关机,你可以直接调用:

 shutdown -r -f -m \\computer_to_restart 

这实际上会强制重新启动计算机。