如何使用Powershell停用Windows远程桌面?

Tob*_*ias 5 powershell remote-desktop

我们所有的测试盒都在VM上运行(Windows Server 2003/08),测试人员只能通过远程桌面访问它们.

某些维护步骤需要从系统中踢出所有用户并通过远程桌面停用访问权限.

我开始在powershell中编写维护脚本,并且正在寻找暂时停用远程桌面的方法.这是可能的,任何直接的解决方案吗?

到目前为止我尝试了什么:

  • 一位同事建议关闭netlogon服务,但我仍然可以使用远程桌面登录.
  • 另一位同事建议禁止
    使用防火墙阻止远程桌面的端口,但不知何故
    对我来说感觉不对(?),因为我不想改变系统的某个部分来影响另一个部分.我太挑剔......?;)

任何提示高度赞赏.

干杯,托比

Tob*_*ias 2

现在我找到了一个非常适合我的解决方案。Windows Server 2008 附带了一项名为“终端服务服务器耗尽模式”的功能

\n\n
\n

...TS 服务器耗尽模式可防止新用户登录到服务器,同时允许当前登录的用户重新连接到其现有会话。通过等待现有用户保存工作并注销,管理员可以关闭终端服务器进行维护,而不会导致用户数据丢失。

\n
\n\n

在激活耗尽模式之前,我确保没有人登录,然后使用以下代码激活耗尽模式:

\n\n
Invoke-Command -ComputerName myServerHostName -ScriptBlock\n{\n   Set-ItemProperty -Path "HKLM:\\SYSTEM\\Currentcontrolset\\control\\Terminal Server" -Name TSServerDrainMode -Value 1\n}\n
Run Code Online (Sandbox Code Playgroud)\n\n

尽管我正在更改注册表项,但不需要重新启动服务器即可使更改生效。这无需重新启动即可工作。

\n\n

当我完成维护工作时,我使用“-Value 0”停用排水模式,并且用户可以再次登录。

\n\n

奇迹般有效!

\n\n
\n\n

我原来的答案是:

\n\n

我通过广泛的网络搜索找到的首选解决方案如下(也未经测试):

\n\n
$Terminal = Get-WmiObject Win32_Terminal \xe2\x80\x93Computer \xe2\x80\x9cComputerName\xe2\x80\x9d\n$Terminal.Enable($True)\n
Run Code Online (Sandbox Code Playgroud)\n\n

我发现的其他可能且有趣的代码片段或该主题的变体:

\n\n

$myWmiObject = Get-WmiObject -namespace \xe2\x80\x9crootCIMV2TerminalServices\xe2\x80\x9d -class Win32_Terminal -Computer \xe2\x80\x9cComputerName\xe2\x80\x9d -Authentication PacketPrivacy

\n\n

或者

\n\n

Set-WmiInstance -namespace \xe2\x80\x9crootCIMV2TerminalServices\xe2\x80\x9d -class Win32_Terminal -ComputerName \xe2\x80\x9cComputerName\xe2\x80\x9d -Authentication PacketPrivacy -Argument @{fEnableTerminal=0}

\n\n

或者

\n\n

Get-WmiObject -ComputerName \xe2\x80\x9cComputerName\xe2\x80\x9d -namespace root/cimv2/terminalservices -class Win32_Terminal -Authentication PacketPrivacy

\n