不知道大家是否还记得几天前写的那边略显散乱的通过VMM实现裸金属部署的最高境界的博文,在把视频录制完成上传到优酷之前,想了想,貌似还有一件事情没有做。那就是对于这台需要管理的服务器还没有启用远程桌面连接,通过带外管理的方式的确可以利用DELL的iDRAC实现远程管理,但是Console协议毕竟不是RDP,其对鼠标和键盘的处理实在不能恭维,经常还会出现键盘误操作造成溢出错误导致浏览器崩溃等现象,长话短说:我需要远程桌面RDP!
 
不知道大家有没有在Server 2012中操作启用远程桌面的经验,如果不了解,那么请阅读本博:)
首先启用远程桌面涉及到两个知识点:
1. 需要启用远程桌面连接 (默认采用高安全级别即需要进行网络级别身份验证)
2. 需要启用防火墙策略允许Remote Desktop给予3389端口的TCP和UDP接入
按照以往的习惯,这需要你在图形界面至少进行两个操作:
 
首先,需要在 我的电脑-属性中配置远程设置,并且在远程分页栏选择允许远程连接此计算机(默认采用高安全级别即需要进行网络级别身份验证)
这个步骤相信很多人都很熟悉:)
裸金属部署云环境的补缺:一站式启用Windows Server 2012 远程桌面管理_第1张图片
接下来,你还需要对防火墙策略进行相应的修改,需要修改防火墙策略才可以进行远程桌面连接:
裸金属部署云环境的补缺:一站式启用Windows Server 2012 远程桌面管理_第2张图片
裸金属部署云环境的补缺:一站式启用Windows Server 2012 远程桌面管理_第3张图片
这太麻烦了,不是吗?呵呵,于是在Server 2012中提供了一个更加简洁的方式,准一站式图形界面操作,你只需要在服务器管理器中选择本地服务器,然后配置远程桌面选项其配置如同上面的步骤1,所不同的是这个操作会自动启用防火墙的端口设置,当然会相对很方便了不是吗?:)
裸金属部署云环境的补缺:一站式启用Windows Server 2012 远程桌面管理_第4张图片

可是为什么我还是觉得这种方式是准一站式呢?毕竟是图形界面需要额外操作啊,还记的我的题目吗?我需要为了我在VMM中自动通过裸金属部署好的节点进行添加这个远程访问的功能,因此这就需要借助VMM的主机配置文件中添加后运行GCE 脚本(Post Script),在这里植入我要插入启用RDP远程连接的Powershell脚本自动完成这项设置。
裸金属部署云环境的补缺:一站式启用Windows Server 2012 远程桌面管理_第5张图片
好的,现在进入比较核心的题目,如何通过脚本实现这个一站式的功能。
一开始想到的就是通过Powershell修改注册表的方式启用RDP,然后在通过修改防火墙策略的方式启用该功能(把最原始的两步图形化操作的实践一遍),简化后的命令为:
set-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server -Name "fDenyTSConnections" -Value 0 -erroraction silentlycontinue
通过(Get-ItemProperty -Path 'HKLM:\System\CurrentControlSet\Control\Terminal Server').fDenyTSConnections的取值,大家应该都可以看出来,这个布尔值,0为$false, 1为$true也就是启用设置成0即可。
防火墙策略就不说了,大家可以用必应搜索一下,一把一把的Powershell解决方式。
这种方式虽然可以解决问题,但是总觉得不如Server 2012中提供的那个准一站式的GUI方便,一定有什么方法解决这个问题,因此又上网挖掘了一下,嘿,还真就赶在”世界末日“之前找到了:)
微软在Powershell中针对WMI对象Win32_TerminalServiceSetting这个类提供一个setAllowTsConnections的方法可以调用,具体可以参考http://msdn.microsoft.com/en-us/library/windows/desktop/aa383644(v=vs.85).aspx
于是,就有了这个最精简的一站式PS命令:)
#Set allows remote desktop connections and modify firewall exception at the same time
(Get-WmiObject -Class "Win32_TerminalServiceSetting" -Namespace root\cimv2\terminalservices).setAllowTsConnections(1,1)

作为补充,大家可能注意到了在VMM主机配置文件的位置还可以配置无人值守应答文件,因此其实利用这个应答文件也可以实现类似目的,只是个人感觉没有用PS方便罢了。这里简单就应答文件所需内容做适当补充:

1. 首先需要下载并安装针对Windows Server 2012和Windows 8提供的WADK http://www.microsoft.com/en-us/download/details.aspx?id=30652
*当然也可以在Windows Server 2012安装介质中找到默认的应答文件直接进行修改
2. 通过安装的WADK中Windows系统映像管理器(WSIM)创建和修改配置文件:
对 specialize 设置
使用此设置配置 Microsoft-Windows-TerminalServices-LocalSessionManager 
Microsoft-Windows-TerminalServices-LocalSessionManager
修改设置fDenyTSConnections=false
使用此设置启用 Microsoft-Windows-TerminalServices-RDP-WinStationExtensions 组件
Microsoft-Windows-TerminalServices-RDP-WinStationExtensions
修改设置UserAuthentication=0

别忘了修改防火墙设置:

Networking-MPSSVC-Svc/FirewallGroups/FirewallGroup
 
修改设置项:

Active=true

Group=Remote Desktop

Key=EnableRemoteDesktop

Profile=all
 
哦,最后别忘了,把创建的PS1脚本和无人值守应答文件拷贝到SCVMM的库目录中。