事实证明,RDSH的许多配置数据存储在名称空间Win32_TSGeneralSetting
中WMI 的类中root\cimv2\TerminalServices
。给定连接的配置证书由该证书的Thumbprint值在称为的属性上引用SSLCertificateSHA1Hash
。
更新:这是一种通用的Powershell解决方案,它可以在计算机的个人商店中获取并设置第一个SSL证书的指纹。如果您的系统具有多个证书,则应-Filter
在gci
命令中添加一个选项,以确保您引用了正确的证书。我将原始答案保留在下面,以供参考。
# get a reference to the config instance
$tsgs = gwmi -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'"
# grab the thumbprint of the first SSL cert in the computer store
$thumb = (gci -path cert:/LocalMachine/My | select -first 1).Thumbprint
# set the new thumbprint value
swmi -path $tsgs.__path -argument @{SSLCertificateSHA1Hash="$thumb"}
为了获得指纹值
- 打开证书的属性对话框,然后选择“详细信息”选项卡
- 向下滚动到“指纹”字段,然后将以空格分隔的十六进制字符串复制到类似记事本的内容中
- 从字符串中删除所有空格。您还需要注意并删除一个非ASCII字符,该字符有时会在字符串中第一个字符之前被复制。在记事本中不可见。
- 这是您需要在WMI中设置的值。它应该看起来像这样:1ea1fd5b25b8c327be2c4e4852263efdb4d16af4。
现在您有了指纹值,这是一个可用于使用wmic设置值的单线:
wmic /namespace:\\root\cimv2\TerminalServices PATH Win32_TSGeneralSetting Set SSLCertificateSHA1Hash="THUMBPRINT"
或者,如果您使用的是PowerShell,则可以改用以下命令:
$path = (Get-WmiObject -class "Win32_TSGeneralSetting" -Namespace root\cimv2\terminalservices -Filter "TerminalName='RDP-tcp'").__path
Set-WmiInstance -Path $path -argument @{SSLCertificateSHA1Hash="THUMBPRINT"}
注意:该证书必须位于计算机帐户的“个人”证书存储中。