用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
相关文章
相关标签/搜索