用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的体验账号过期了,所以不得不暂停.今天有幸参加 ...
随机推荐
- Mac/IOS/linux获取当前时间包含微秒毫秒的代码
#include <sys/time.h> 1 struct UnityLocalTimeStat { int Year; int Month; int DayOfWeek; int Da ...
- 学习微信小程序之css6
- InnoDB还是MyISAM 再谈MySQL存储引擎的选择
两种类型最主要的差别就是Innodb 支持事务处理与外键和行级锁.而MyISAM不支持.所以MyISAM往往就容易被人认为只适合在小项目中使用. 我作为使用MySQL的用户角度出发,Innodb和My ...
- 【Python装饰者】在函数测试的作用
[引言] 我们经常需要多函数进行耗时测试,测试方法有许多,这里介绍装饰者的方法,提高耗时测试代码的可复用性,在其他方面的应用也是如此. [设计原则] 类应该对扩展开放,对修改关闭. [代码] (1)定 ...
- [杂谈]冲NOIP一等奖。。
唉不想多说了. 真是一段“传奇”的经历啊. 还是那句话..“是的我上次什么都没说就走了...”这次也一样. 我还是太单纯的以为我们是肯定能够参加北大的夏令营的..然而结果真是意料之外啊. 本来我以为我 ...
- bzoj3674同上(好短)
+强在 就过了 既没有启发式又没有路径压缩,连建树都用的是代码最短的写法(什么心态,每天追求代码短) 话说回来 可持久化的数组感觉只能出类似裸题的题目,,,,藏也藏不住啊 #include <c ...
- PHP多级联动的学习(一)
我尝试在ThinkCMF中实现多级联动,首先我开始看了dede的联动类别管理前后台的代码以及他的数据库,经过非常多次的尝试,我渐渐有了一点想法,并给予实施. 首先写出前台的界面.如图. 然后在数据库中 ...
- 软件工程:Wordcount程序作业
由于时间的关系,急着交作业,加上这一次也不是那么很认真的去做,草草写了“Wordcount程序”几个功能,即是 .txt文件的读取,能计算出文件内容的单词数,文件内容的字符数,及行数. 这次选用C来做 ...
- 一站式解决,Android 拍照 图库的各种问题.
在android开发中, 在一些编辑个人信息的时候,经常会有头像这么一个东西,就两个方面,调用系统相机拍照,调用系统图库获取图片.但是往往会遇到各种问题: 1.oom 2.图片方向不对 3.activ ...
- mycat入门教程
github https://github.com/MyCATApache/Mycat-Server myCat介绍 myCat的诞生,要从其前身Amoeba和Cobar说起. Amoeba(变形虫) ...