用Powershell启用Windows Azure上的远程桌面服务
【题外话】
某天不小心点了XX管家的自动修复,虽然及时点了取消也看到了远程桌面服务成功被关闭,但是忙完该干的事以后竟然忘记了这件事,在断开远程桌面服务之前也忘记再次打开。以至于之后几天一直以为Azure出现了问题,直到某天突然想起来是自己忘重新打开远程桌面的问题。还好XX管家没有把Powershell禁掉,我们还可以使用Powershell再次启用远程桌面服务。
【文章索引】
【一、XX管家禁用远程桌面的实质】
再次使用XX管家将远程桌面禁用,发现实际上是这样的:

可见其并没有停止或者禁用Remote Desktop Services(TermService),而仅仅是将远程桌面的设置改为了“不允许连接到这台计算机”,并且也没有对防火墙配置进行修改。
【二、Powershell连接远程主机】
Powershell Remoting Protocol协议是基于HTTP或HTTPS协议的,其端口分别为5985(HTTP)和5986(HTTPS),对于后者与平时的HTTPS一样,都是使用SSL证书进行传输加密的。对于Azure默认的虚拟机,已经配置好了HTTPS协议的Powershell,可以直接使用5986端口进行通信。
Powershell连接远程主机的命令是“Enter-PSSession”,可以参考这里。而对于连接Azure,我们使用SSL证书+用户名即可连接,命令如下:
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>
【三、使用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
);
可以看到其可接受两个参数,分别是是否启用远程桌面连接以及是否修改防火墙例外设置。例如我们仅修改允许连接远程桌面,则可以使用如下的命令:
(Get-WMIObject Win32_TerminalServiceSetting -Namespace ROOT\CIMV2\TerminalServices).SetAllowTSConnections(1)
【四、其他可能导致无法使用远程桌面的问题】
除了将远程桌面的设置改为了“不允许连接到这台计算机”外,还可能出现没有开启远程桌面服务或者在防火墙配置中禁用了远程桌面端口。
如果获取发现远程桌面服务没有打开,那么我们是没法在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操作更简单些了。
【相关链接】
- CSI: Re-enabling Remote Desktop with PowerShell after you've blocked it with your own firewall rule:http://www.hanselman.com/blog/CSIReenablingRemoteDesktopWithPowerShellAfterYouveBlockedItWithYourOwnFirewallRule.aspx
- Relationship to Other Protocols:http://msdn.microsoft.com/en-us/library/dd305175.aspx
- Enter-PSSession:http://msdn.microsoft.com/en-us/library/hh849707
- PowerShell探秘(4)WMI对象:远程桌面开关:http://blog.csdn.net/zooen2011/article/details/12960989
- Win32_TerminalServiceSetting class:http://msdn.microsoft.com/zh-cn/library/aa383640
用Powershell启用Windows Azure上的远程桌面服务的更多相关文章
- 在WINDOWS SERVER 上或远程桌面中使用 MUTEX
引用: http://www.cnblogs.com/fg0711/archive/2012/05/03/2480502.html 使用Mutex需要注意的两个细节 可能你已经注意到了,例子中在给Mu ...
- 在工作组的环境中配置Windows 2012 R2的远程桌面服务
在工作组的环境中配置Windows 2012 R2的远程桌面服务 How to configure Remote Desktop Service in Windows 2012 R2 workgrou ...
- Windows Azure上的大数据服务: HDInsight的介绍
这个视频介绍了目前非常流行的大数据处理框架Hadoop的Windows Azure上的实现:HDInsight,以及利用MapReduce来对大数据进行分析,利用Hive进行查询,利用客户端Power ...
- Windows Server 2008 R2远程桌面服务配置和授权激活
远程桌面服务安装好之后使用的是120天临时授权,所以会跳出以下提示,我们介绍远程桌面授权的激活. 现在我们使用命令 mstsc /admin 强制登录服务器 需要在“远程桌面服务”--安装“远程桌面授 ...
- Windows Server 2008 R2远程桌面服务安装配置和授权激活
1.安装 2.远程桌面授权激活 2.1 管理工具——远程桌面服务——(远程桌面授权管理)RD授权管理器: 2.2 由于RD授权服务器还未激活,所以授权服务器图标右下角显示红色×号: 点服务器展开——右 ...
- 排查 Azure 虚拟机的远程桌面连接问题
与基于 Windows 的 Azure 虚拟机 (VM) 的远程桌面协议 (RDP) 连接可能会因各种原因而失败,使用户无法访问 VM. 问题可能出在 VM 上的远程桌面服务.网络连接或主计算机上的远 ...
- Windows 2003/2008更改远程桌面端口脚本
保存为bat文件,点击运行按提示输入新端口自动完成,直接下载更改远程桌面端口脚本 @echo off color 0a title @@ 修改Windows XP/2003/2008远程桌面服务端 ...
- 如何将SQL Server运行到Windows Azure上
从2012年6月6日开始,Windows Azure上一些强大的新功能现在可用于预览,包括新的Windows Azure虚拟机(VM).其中有关Windows Azure虚拟机最强大的一件事是他们利用 ...
- [转]Windows Azure上安装SharePoint 2013
基于Windows Azure 安装SharePoint 2013 前段时间写的基于Windows Azure安装SharePoint系列,由于Azure的体验账号过期了,所以不得不暂停.今天有幸参加 ...
随机推荐
- Beginning Scala study note(1) Geting Started with Scala
1. Scala is a contraction of "scalable" and "language". It's a fusion of objecte ...
- tmux 简单命令
tmux 大概结构图: 如果你已经安装了tmux,则输入tmux会进入tmux功能界面 0. tmux ls 列出已经存在session 1. tmux new -s foo 新建session ...
- 可变参数列表与printf()函数的实现
问题 当我们刚开始学习C语言的时候,就接触到printf()函数,可是当时"道行"不深或许不够细心留意,又或者我们理所当然地认为库函数规定这样就是这样,没有发现这个函数与普通的函数 ...
- 编译原理-词法分析05-正则表达式到DFA-01
编译原理-词法分析05-正则表达式到DFA 要经历 正则表达式 --> NFA --> DFA 的过程. 0. 术语 Thompson构造Thompson Construction 利用ε ...
- Content Negotiation in ASP.NET Web API
本文描述Web API实现内容协商(content negotiation). The HTTP specification (RFC 2616) defines content negotiatio ...
- 洛谷 P1827 美国血统 American Heritage Label:字符串Water
题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的记帐员.他把他的奶牛 们的家谱作成二叉树,并且把二叉树以更线性的“树的中序遍历”和“树的前序遍历”的符号加以记录而 不是用图形 ...
- BZOJ 2048 题解
2048: [2009国家集训队]书堆 Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 1076 Solved: 499[Submit][Status ...
- css 浅析display属性
继续开始我的css之旅吧.今天我们来说什么啊.构思了两天还是没有什么思路,但是学习的步伐我们不能停止下来.还是按照之前的计划来讲讲display,在讲这个之前我们还是按照老规矩来扯扯蛋,步子不能够迈大 ...
- jQuery 获取屏幕高度、宽度
做手机Web开发做浏览器兼容用到了,所以在网上找了些汇总下. alert($(window).height()); //浏览器当前窗口可视区域高度alert($(document).height()) ...
- 微信公众平台API接口
简介 微信公众平台消息接口为开发者提供了一种新的消息处理方式.微信公众平台消息接口为开发者提供与用户进行消息交互的能力.对于成功接入消息接口的微信公众账号,当用户发消息给公众号,微信公众平台服务器会使 ...