Using netsh on PowerShell fails with error: The parameter is incorrect

南笙酒味 提交于 2019-12-19 20:00:12

问题


I've been trying to run the following command on PowerShell:

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

The problem is, it returns "The parameter is incorrect" every time. I've check the cert hash number, and the generated guid and they all alright. In fact, I ran the same command in cmd.exe and it worked perfectly, which adds to the frustration.

I want to pass variables as the certhash and appid, which is why I'm using PowerShell.

If anyone can help me understand why it isn't working or if there is something missing for it to work on PowerShell.


回答1:


I finally learned what the problem was: although in PowerShell you can execute cmd commands natively, the parsing of the command slightly changes, and in this case it disrupted the interpretation of the appid parameter (those curly brackets!).

To solve it, I just enclosed the brackets ({}) and <random guid> in single quotes, as such,

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

as opposed to (notice the missing 'quotes'),

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

and the command worked perfectly.

For more info on PowerShell parsing, Understanding PowerShell Parsing Modes.




回答2:


To add to rae1's answer. This also helps if you are using Invoke-Expression

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

Notice that the single quotes inside a double quoted string don't prevent the variable from being substituted.

The downside of this method is that you have to escape the colon inside the string with a backtick



来源:https://stackoverflow.com/questions/9722273/using-netsh-on-powershell-fails-with-error-the-parameter-is-incorrect

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!