用Powershell啓用Windows Azure上的遠程桌面服務

【題外話】html

某天不當心點了XX管家的自動修復,雖然及時點了取消也看到了遠程桌面服務成功被關閉,可是忙完該乾的事之後居然忘記了這件事,在斷開遠程桌面服務以前也忘記再次打開。以致於以後幾天一直覺得Azure出現了問題,直到某天忽然想起來是本身忘從新打開遠程桌面的問題。還好XX管家沒有把Powershell禁掉,咱們還可使用Powershell再次啓用遠程桌面服務。shell

 

【文章索引】瀏覽器

  1. XX管家禁用遠程桌面的實質
  2. Powershell鏈接遠程主機
  3. 使用Powershell啓用遠程桌面
  4. 其餘可能致使沒法使用遠程桌面的問題

 

【1、XX管家禁用遠程桌面的實質】app

再次使用XX管家將遠程桌面禁用,發現其實是這樣的:ide

可見其並無中止或者禁用Remote Desktop Services(TermService),而僅僅是將遠程桌面的設置改成了「不容許鏈接到這臺計算機」,而且也沒有對防火牆配置進行修改。網站

 

【2、Powershell鏈接遠程主機】ui

Powershell Remoting Protocol協議是基於HTTP或HTTPS協議的,其端口分別爲5985(HTTP)和5986(HTTPS),對於後者與平時的HTTPS同樣,都是使用SSL證書進行傳輸加密的。對於Azure默認的虛擬機,已經配置好了HTTPS協議的Powershell,能夠直接使用5986端口進行通訊。加密

Powershell鏈接遠程主機的命令是「Enter-PSSession」,能夠參考這裏。而對於鏈接Azure,咱們使用SSL證書+用戶名便可鏈接,命令以下:spa

Enter-PSSession -ComputerName 域名或IP地址 -Port 5986 -Credential 用戶名 -UseSSL

若是咱們如今直接輸入命令的話,將會提示下列信息:操作系統

因此咱們須要獲取服務上的證書,而後存到信任的證書頒發機構中。

對於IE瀏覽器,首先須要在「Internet選項」的「高級」中關閉「顯示友好 HTTP 錯誤信息」,而後訪問「https://域名:5986」,在確認了繼續訪問網站後,點擊「證書錯誤」,而後選擇「查看證書」,接下來能夠在「常規」選項卡中選擇「安裝證書」或在「詳細信息」選項卡中選擇「複製到文件」。

對於Chrome瀏覽器(不論Windows下的仍是Linux下的),能夠點擊網址前邊的圖標,在「Connection」下點擊「Certificate Information」,若是在Windows下操做的話,出現的對話框與IE的相同,若是在Linux下操做,請選擇「Export」,而後能夠設置文件的擴展名爲「.cer」。

若是上述步驟直接點擊了「安裝」證書,將會出現「證書導入嚮導」;若是選擇的是保存.cer文件,那麼雙擊打開.cer文件,選擇「安裝證書」也會出現「證書導入嚮導」。在嚮導中能夠選擇將證書爲當前用戶保存也能夠爲當前計算機保存,而後選擇「將全部的證書都放入下列存儲」,而後選擇「受信任的根證書頒發機構」,就能夠了。

接下來再輸入上述的命令提示符會變爲以下的形式說明登錄成功:

[xxxxxxxx.cloudapp.net]: PS C:\Users\用戶名\Documents>

 

【3、使用Powershell啓用遠程桌面】

對於管理Windows,可使用WMI來實現,Powershell也提供了操做WMI的命令。

好比咱們獲取Remote Desktop Services(TermService)服務的狀態,可使用以下的命令:

Get-WMIObject -query "select * from win32_service where name='TermService'" | out-string

而若是遠程桌面服務是正在運行的,咱們則可使用獲取遠程桌面服務的運行狀態,關於Win32_TerminalServiceSetting這個WMI類能夠參考這裏,固然若是操做系統是2K3或如下版本的話Namespace就應該改成ROOT\CIMV2:

Get-WMIObject Win32_TerminalServiceSetting -Namespace ROOT\CIMV2\TerminalServices

好比若是遠程桌面設置爲「不容許鏈接到這臺計算機」,那麼以下的「AllowTSConnections」就會爲0。

Win32_TerminalServiceSetting有個方法是SetAllowTSConnections,其方法原型以下:

uint32 SetAllowTSConnections(
  [in]  uint32 AllowTSConnections,
  [in]  uint32 ModifyFirewallException
);
View Code

能夠看到其可接受兩個參數,分別是是否啓用遠程桌面鏈接以及是否修改防火牆例外設置。例如咱們僅修改容許鏈接遠程桌面,則可使用以下的命令:

(Get-WMIObject Win32_TerminalServiceSetting -Namespace ROOT\CIMV2\TerminalServices).SetAllowTSConnections(1)

 

【4、其餘可能致使沒法使用遠程桌面的問題】

除了將遠程桌面的設置改成了「不容許鏈接到這臺計算機」外,還可能出現沒有開啓遠程桌面服務或者在防火牆配置中禁用了遠程桌面端口。

若是獲取發現遠程桌面服務沒有打開,那麼咱們是無法在Powershell中經過WMI對遠程桌面進行設置的(獲取、設置都不可,表現爲命令一直卡住沒法繼續),因此咱們須要開啓遠程桌面服務:

若是Remote Desktop Services被禁用,咱們可使用Set-Service命令首先須要將其修改成手動啓動(默認值):

Set-Service -Name TermService -StartupType Manual

而後使用Start-Service啓動該服務(固然net start也是能夠的):

Start-Service -Name TermService

此外,開啓防火牆中遠程桌面端口除了使用WMI外,也可使用netsh命令,咱們可使用以下命令獲取防火牆的規則,固然規則名稱在不一樣操做系統下仍是有出入的,這裏的是Windows Server 2008 R2中文版的規則名稱:

netsh advfirewall firewall show rule name="遠程桌面(TCP-In)"

而後也可使用以下的命令啓用這些規則,這裏的操做系統同上,若是是英文操做系統的話就應該替換爲「remote desktop」:

netsh advfirewall firewall set rule group="遠程桌面" new enable=Yes

不過這種方式相對仍是複雜不少,就不如使用WMI操做更簡單些了。

 

【相關連接】

  1. CSI: Re-enabling Remote Desktop with PowerShell after you've blocked it with your own firewall rule:http://www.hanselman.com/blog/CSIReenablingRemoteDesktopWithPowerShellAfterYouveBlockedItWithYourOwnFirewallRule.aspx
  2. Relationship to Other Protocols:http://msdn.microsoft.com/en-us/library/dd305175.aspx
  3. Enter-PSSession:http://msdn.microsoft.com/en-us/library/hh849707
  4. PowerShell探祕(4)WMI對象:遠程桌面開關:http://blog.csdn.net/zooen2011/article/details/12960989
  5. Win32_TerminalServiceSetting class:http://msdn.microsoft.com/zh-cn/library/aa383640
相關文章
相關標籤/搜索