用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的体验账号过期了,所以不得不暂停.今天有幸参加 ...
随机推荐
- Quart.NET实施参考
参考 1.博客园: http://www.cnblogs.com/lzrabbit/archive/2012/04/13/2447609.html 2.官网:http://www.cnblogs.co ...
- C#通过第三方组件生成二维码(QR Code)和条形码(Bar Code)
用C#如何生成二维码,我们可以通过现有的第三方dll直接来实现,下面列出几种不同的生成方法: 1):通过QrCodeNet(Gma.QrCodeNet.Encoding.dll)来实现 1.1):首先 ...
- maven权威指南学习笔记(五)—— POM
1. 简介 Archetype插件通过 pom.xml 文件创建了一个项目.这就是项目对象模型 (POM),一个项目的声明性描述. 当Maven运行一个目标的时候,每个目标都会访问定 义在项目POM里 ...
- NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解多少钱?
NXP恩智浦P87C51/52/54/58/591芯片解密单片机破解 芯片解密型号: P87C51x2.P87C52x2.P87C54x2.P87C58x2.P87C591 单片机解密 #####[ ...
- Python os模块介绍
os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 os.chdir("dirname") 改变当前脚本工作目录:相当于shell下cd os.curd ...
- 在powerdesigner中创建物理数据模型
物理数据模型(PDM)是以常用的DBMS(数据库管理系统)理论为基础,将CDM/LDM中所建立的现实世界模型生成相应的DBMS的SQL语言脚本.PDM叙述数据库的物理实现,是对真实数据库的描述 PDM ...
- gem安装cocoapods
1.升级Ruby环境 sudo gem update --system 如果Ruby没有安装,请参考 如何在Mac OS X上安装 Ruby运行环境 2.安装CocoaPods时我们要访问cocoap ...
- 一致性hash算法详解
转载请说明出处:http://blog.csdn.net/cywosp/article/details/23397179 一致性哈希算法在1997年由麻省理工学院提出的一种分布式哈希(DHT) ...
- js基础3
内置对象 内置对象就是JS提供的一套工具箱,我们通过内置可以很方便的进行一些操作. Math对象: Math.ceil() //向上取整,天花板 Math.floor() //向下取整,地板 Math ...
- JS 将数字转化成为货币格式
最近由于项目的需要需要将数字format成货币格式,自己搞了半天效果不是很好,博客园有篇问题很好,再次转载记录一下 http://www.cnblogs.com/mingmingruyuedlut/a ...