从PowerShell执行命令

时间:2014-07-25 20:21:02

标签: powershell

我正在尝试从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

研究命令的执行我发现什么都不能解释这种行为。 我唯一的理论是" winrm"命令本身就是一个脚本,而且有些东西是行为不端。

2 个答案:

答案 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