2011-11-25 52 views
5

我們所有的測試箱都運行在虛擬機(windows server 2003/08)上,測試人員只能通過遠程桌面訪問它們。如何使用Powershell停用Windows遠程桌面?

某些維護步驟需要將所有用戶從系統中踢出並通過遠程桌面停用訪問。

我開始在powershell中編寫維護腳本,並且正在尋找一種方法來暫時停用遠程桌面。這是可能的,任何直截了當的解決方案呢?

我迄今爲止嘗試:

  • 一個同事推薦的關斷的Netlogon服務,但我可以 仍然遠程桌面登錄。
  • 另一位同事建議禁止使用防火牆阻止端口
    遠程桌面,但不知何故不感到
    我的權利(?),因爲我不想更改系統 的一部分影響另一部分。我太挑剔...? ;)

任何提示高度讚賞。

乾杯, 託比

回答

1

現在我發現,對我的作品完美的解決方案。在Windows Server 2008中有一個名爲「Terminal Services Server Drain Mode

功能...的TS服務器消耗模式可以防止新用戶登錄到服務器,目前雖然允許登錄的用戶重新連接到現有會話。通過等待現有用戶保存他們的工作並註銷,管理員可以關閉終端服務器進行維護,而不會導致用戶數據丟失。

之前我激活漏模式我保證沒有人登錄,然後我主動排水模式與下面的代碼:

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

1

您需要在默認情況下

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Terminal Server\fDenyTSConnections 

值設置爲1,禁用遠程桌面,但需要重新啓動。

,似乎不需要重新啓動另一種方法(未測試):

$ts=get-WMIObject Win32_TerminalServiceSetting -computername remotemachinename 

$ts.SetAllowTSConnections(0) 
+0

嗨Christian,非常感謝。這是我正在尋找的解決方案。不幸的是,由於幾個組策略和權利問題,我不能在我們的環境中使用這個解決方案。 – Tobias

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() 

,而不是調用命令(),因爲NEAD RCP openned和RPC聯接默認情況下在Windows

相關問題