【问题标题】:Script to Kill All RDP Sessions终止所有 RDP 会话的脚本
【发布时间】:2020-11-15 10:10:32
【问题描述】:

我正在尝试创建一个简单的脚本来终止所有远程桌面会话,无论是活动的还是断开的,而无需重新启动服务器。我的服务器操作系统是 Windows Server 2012R2,启用并获得了远程桌面服务。

我在这里找到了一个简单的批处理文件脚本来执行此任务:enter link description here

当我在终端服务器上本地运行此脚本时,我在批处理文件运行时收到错误消息:找不到会话光盘

并且只有控制台用户被注销。谁能告诉我这个脚本有什么问题?

query session >session.txt
for /f "skip=1 tokens=3," %%i in (session.txt) DO logoff %%i
del session.txt

我的会话文本文件如下所示:

 SESSIONNAME       USERNAME                 ID  STATE   TYPE        DEVICE 
 services                                    0  Disc                        
 >console           Administrator            13  Active                      
                   wcunningham              18  Disc                        
                   kstarkey                 25  Disc                        
 rdp-tcp#11        cyannone                 52  Active                      
 rdp-tcp                                 65536  Listen                      

【问题讨论】:

  • 例如,在第二行中,第三个标记是Disc,尽管您可能期待0,因为没有USERNAME 的条目...
  • 第三个token不是ID吗?
  • 第三个token是数据中有sessionnameusername时的ID。 FOR /F 命令默认用空格和制表符分隔输出。这些是数据之间的空格。
  • 好的。那么如何调整我的脚本以终止所有会话,无论是否有会话名称或用户名
  • 输出是定宽文本,所以就这样处理,意思是用sub-string expansion去掉会话和用户名……

标签: batch-file windows-server-2012-r2 remote-desktop


【解决方案1】:

我发现一个很好的解决方法是添加一个额外的行来处理断开的会话。由于断开连接的会话没有列出会话名称,因此 ID 位于位置 2 而不是位置 3,就像活动会话一样。因此,添加一个指定 token=2 的附加行就可以了:

query session >session.txt
for /f "skip=1 tokens=2," %%i in (session.txt) DO logoff.exe %%i
for /f "skip=1 tokens=3," %%i in (session.txt) DO logoff.exe %%i
del session.txt

【讨论】:

    猜你喜欢
    • 2022-11-03
    • 1970-01-01
    • 2022-12-13
    • 1970-01-01
    • 2012-04-30
    • 2017-07-09
    • 2011-10-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多