我一直在尝试在PowerShell上运行以下命令:
netsh http add sslcert ipport=0.0.0.0:443 certhash=<some certhash> appid={<random guid>}
问题是,它每次都返回"The parameter is incorrect"
。我已经检查了证书哈希数和生成的guid,它们都很好。事实上,我在cmd.exe
中运行了相同的命令,它运行得很好,这增加了挫败感。
我想将变量作为certhash
和appid
传递,这就是我使用PowerShell的原因。
如果有人能帮助我理解它为什么不起作用,或者它在PowerShell上是否缺少一些功能。
我终于了解了问题所在:尽管在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解析的详细信息,请参阅了解PowerShell解析模式。
添加到rae1的答案中。如果您正在使用InvokeExpression,这也会有所帮助
$command = "netsh http add sslcert ipport=$hostIp`:$port certhash=$thumbprint appid='{$appId}'"
Invoke-Expression $command
请注意,双引号字符串中的单引号不会阻止变量被替换。
此方法的缺点是,必须使用反勾来转义字符串中的冒号