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

时间:2011-11-25 11:09:39

标签: powershell remote-desktop

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

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

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

到目前为止我尝试过:

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

任何提示都受到高度赞赏。

干杯, 托比

4 个答案:

答案 0 :(得分:1)

您需要设置

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections 
默认情况下,

值为1以禁用远程桌面但需要重新启动。

另一种似乎不需要重启的方法(未测试):

$ts=get-WMIObject Win32_TerminalServiceSetting  -computername remotemachinename

$ts.SetAllowTSConnections(0)

答案 1 :(得分:1)

现在我找到了一个适合我的解决方案。 Windows Server 2008附带了一个名为“Terminal Services Server Drain Mode

的功能
  

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

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

Invoke-Command -ComputerName myServerHostName -ScriptBlock
{
   Set-ItemProperty -Path "HKLM:\SYSTEM\Currentcontrolset\control\Terminal Server" -Name TSServerDrainMode -Value 1
}

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

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

像魅力一样!


我原来的回答是:

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

$Terminal = Get-WmiObject Win32_Terminal –Computer “ComputerName”
$Terminal.Enable($True)

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

$myWmiObject = Get-WmiObject -namespace “rootCIMV2TerminalServices” -class Win32_Terminal -Computer “ComputerName” -Authentication PacketPrivacy

Set-WmiInstance -namespace “rootCIMV2TerminalServices” -class Win32_Terminal -ComputerName “ComputerName” -Authentication PacketPrivacy -Argument @{fEnableTerminal=0}

Get-WmiObject -ComputerName “ComputerName” -namespace root/cimv2/terminalservices -class Win32_Terminal -Authentication PacketPrivacy

答案 2 :(得分:0)

今天早上寻找别的东西(巧合)我看到了这一点:“Checking and enabling Remote Desktop with PowerShell”。

摘要:涉及注册表操作。

答案 3 :(得分:0)

我经常使用这个gWmi代码:

#Remote change logon /disable
$TS_Connector = gwmi Win32_TerminalServiceSetting -N "root/cimv2/terminalservices" -computername $ServerName -Authentication PacketPrivacy
$TS_Connector.Logons=1
$TS_Connector.Put()

和启用登录

#Remote change logon /enable
$TS_Connector = gwmi Win32_TerminalServiceSetting -N "root/cimv2/terminalservices" -computername $ServerName -Authentication PacketPrivacy
$TS_Connector.Logons=0
$TS_Connector.Put()

而不是Invoke-command()因为RCP打开,默认情况下在Windows上禁用RPC连接