使用PowerShell脚本强制注销RDP会话

日期: 2015-09-29 作者:Adam Bertram翻译:杨旭 来源:TechTarget中国 英文

这已经不是一个新的问题了:终端用户通过远程桌面协议登录到一台Windows服务器后忘记退出,然后继续消耗服务器上的资源。这时,你可以使用PowerShell脚本来强制终端用户注销并释放这些资源。 为了强迫用户注销远程桌面协议(RDP)会话,管理员必须首先了解该服务器上所有远程桌面服务(RDS)服务器会话,并查看它们的状态。检测所有服务均断开连接后,下一步才是强制下线。

下载免费的PowerShell模块PSTerminalServices,并确保在你的PowerShell环境中可以使用。所有的安装说明都可在PSTerminalServices站点获得。 第一步,我要用这个模块来检查是否能得到实……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

这已经不是一个新的问题了:终端用户通过远程桌面协议登录到一台Windows服务器后忘记退出,然后继续消耗服务器上的资源。这时,你可以使用PowerShell脚本来强制终端用户注销并释放这些资源。

为了强迫用户注销远程桌面协议(RDP)会话,管理员必须首先了解该服务器上所有远程桌面服务(RDS)服务器会话,并查看它们的状态。检测所有服务均断开连接后,下一步才是强制下线。

下载免费的PowerShell模块PSTerminalServices,并确保在你的PowerShell环境中可以使用。所有的安装说明都可在PSTerminalServices站点获得。

第一步,我要用这个模块来检查是否能得到实验室服务器HYPERV上的所有会话活动(图1)。


图1. Get-TSSession -ComputerName HYPERV

目前,我只有几个会话处于断开状态。所以,我可以看到所有的会话,但是我只是想看到那些断开连接的。要做到这一点,我将添加State参数(图2)。


图2. Get-TSSession -ComputerName HYPERV -State Disconnected

这个方法很有用,但是仍然有一个问题。会话0不是一个RDP会话,无法用Get-TSSession将其从结果列表中删除。这时,我会使用Where-Object来删除该会话(图3)。


图3. Get-TSSession -ComputerName HYPERV -State Disconnected | where { $_.SessionID -ne 0 }

现在,我可以看到所有想停止的会话。接下来,我只需要杀死这些会话。要做到这一点,你要知道PSTerminalServices模块提供了Stop-TSSession cmdlet,可以帮你杀死会话(图4)。


图4. Get-TSSession -ComputerName HYPERV -State Disconnected | where {$_.SessionID -ne 0} | Stop-TSSession

Stop-TSSession cmdlet结束会话后可能会导致最终用户丢失工作内容,因此会提示管理员。这里我可以点击“A”继续下一步,但有时管理员不喜欢弹出提示信息。如果你将这些放在一个更大的脚本中,提示将中断脚本。最好的办法是省略提示。

Stop-TSSession cmdlet有一个通用的PowerShell参数,叫做–Force,它允许管理员执行操作时没有任何确认信息打扰。

Get-TSSession -ComputerName HYPERV -State Disconnected | where {$_.SessionID -ne 0} | Stop-TSSession -Force

如果没有输出,说明会话已成功注销。

作者

Adam Bertram
Adam Bertram

自由撰稿人

相关推荐