在PowerShell上使用netsh失败并显示错误:参数不正确

时间:2012-03-15 14:52:37

标签: ssl powershell cmd ssl-certificate netsh

我一直在尝试在PowerShell上运行以下命令:

    netsh http add sslcert ipport=0.0.0.0:443 certhash=<some certhash> appid={<random guid>}

问题是,每次都会返回"The parameter is incorrect"。我检查了证书哈希号码和生成的guid,他们都没问题。事实上,我在cmd.exe中运行了相同的命令,它运行得很好,这增加了挫折感。

我想将变量作为certhashappid传递,这就是我使用PowerShell的原因。

如果有人可以帮助我理解为什么它无法正常工作,或者有什么东西不能用于PowerShell。

2 个答案:

答案 0 :(得分:13)

我终于知道了问题所在:虽然在PowerShell中你可以原生地执行cmd命令,但是命令的解析会稍微改变,在这种情况下它会中断appid参数的解释(那些花括号!)。

要解决这个问题,我只是将括号({})和<random guid>括在单引号中,因此,

    netsh http add sslcert ipport=0.0.0.0:443 certhash=<certhash> appid='{<random guid>}'

而不是(注意缺少的'引号'),

    netsh http add sslcert ipport=0.0.0.0:443 certhash=<certhash> appid={<random guid>}

并且命令完美无缺。

有关PowerShell解析的更多信息,请Understanding PowerShell Parsing Modes

答案 1 :(得分:0)

添加到rae1's回答。如果您使用Invoke-Expression

,这也会有所帮助
$command = "netsh http add sslcert ipport=$hostIp`:$port certhash=$thumbprint appid='{$appId}'"
Invoke-Expression $command

请注意,双引号字符串中的单引号不会阻止变量被替换。

此方法的缺点是您必须使用反引号

来转义字符串内的冒号