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

6

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

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

问题在于它每次返回“参数不正确”。我已经检查了证书哈希值和生成的GUID,它们都没问题。实际上,我在cmd.exe中运行了相同的命令,它完美地工作了,这让我感到非常沮丧。
我想要将变量作为certhash和appid传递,这就是为什么我使用PowerShell的原因。
如果有人能帮我理解为什么它不起作用,或者是否缺少某些东西才能在PowerShell上工作,请帮助我。
2个回答

16

我最终了解到问题所在:虽然在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解析模式


0

补充rae1的回答。如果你在使用Invoke-Expression,这同样有帮助。

$command = "netsh http add sslcert ipport=$hostIp`:$port certhash=$thumbprint appid='{$appId}'"
Invoke-Expression $command

请注意,在双引号字符串中的单引号不会防止变量被替换。
这种方法的缺点是,您必须使用重音符号转义字符串内部的冒号。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接