我正在尝试从PowerShell脚本配置WinRM。我使用以下代码
$WinrmCreate= "winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=""$sHostName"";CertificateThumbprint=""$CertificateThumbPrint""}"
Invoke-Expression $WinrmCreate
主机名和证书thumprint是上面的变量,它们已经过验证。详细输出显示
VERBOSE: winrm create winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname="RSNODE1";CertificateThumbprint="6C79C8E6E88779037593E6234DCE6E1A55662F87"}
然而,执行" Invoke-Expression"给出以下错误
Invalid use of command line. Type "winrm -?
有趣的是,如果我将我的行的输出复制/粘贴到命令提示符,它将创建没有错误的侦听器。
研究命令的执行我发现什么都不能解释这种行为。 我唯一的理论是" winrm"命令本身就是一个脚本,而且有些东西是行为不端。
答案 0 :(得分:5)
哈希表,例如PowerShell解释@{Hostname=...}
。如果您使用的是V3或更高版本,请尝试使用--%
简单参数解析运算符:
$env:Hostname = $sHostName
$env:CertThumbPrint = $CertificateThumbPrint
$WinrmCreate= "winrm create --% winrm/config/Listener?Address=*+Transport=HTTPS @{Hostname=`"%HostName%`";CertificateThumbprint=`"%CertThumbPrint%`"}"
答案 1 :(得分:0)
这就是我为我所做的,证书有FQDN:
$fqdn ="CertificateSubjectName"
$certificate="CN="+$fqdn
$CertificateThumbPrint=(Get-ChildItem cert:\LocalMachine\My | Where-Object { $_.Subject -eq $certificate }).thumbprint
$WinrmCreate= 'winrm create winrm/config/Listener?Address=*+Transport=HTTPS `@`{Hostname=`"`'+$fqdn+'`"`;CertificateThumbprint=`"`'+$CertificateThumbPrint+'`"`}'
invoke-expression $WinrmCreate