我们所有的测试盒都在虚拟机上运行(Windows Server 2003/08),测试人员只能通过远程桌面访问它们。
某些维护步骤需要从系统中踢出所有用户,并通过远程桌面停用访问权限。
我开始在powershell中编写维护脚本,并且正在寻找暂时停用远程桌面的方法。这是可能的,任何直接的解决方案吗?
到目前为止我尝试过:
任何提示都受到高度赞赏。
干杯, 托比
答案 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连接