Использование netsh в PowerShell завершается с ошибкой: неверный параметр - PullRequest
5 голосов
/ 15 марта 2012

Я пытался запустить следующую команду в PowerShell:

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

Проблема в том, что он возвращает "The parameter is incorrect" каждый раз.Я проверил номер хеш-сертификата, сгенерированный гид и все в порядке.Фактически, я выполнил ту же команду в cmd.exe, и она отлично работала, что добавляет разочарования.

Я хочу передать переменные как certhash и appid, поэтому яиспользуя PowerShell.

Если кто-нибудь может помочь мне понять, почему он не работает или что-то не хватает для работы в PowerShell.

Ответы [ 2 ]

14 голосов
/ 16 марта 2012

Наконец-то я понял, в чем проблема: хотя в 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 голосов
/ 03 мая 2018

Чтобы добавить к rae1's ответ. Это также помогает, если вы используете Invoke-Expression

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

Обратите внимание, что одинарные кавычки внутри строки в двойных кавычках не препятствуют замене переменной.

Недостатком этого метода является то, что вы должны экранировать двоеточие внутри строки с помощью обратного кавычка

...