我一直在尝试在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。
答案 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
请注意,双引号字符串中的单引号不会阻止变量被替换。
此方法的缺点是您必须使用反引号
来转义字符串内的冒号