为什么netsh http会添加来自Powershell ps1文件的sslcert抛出错误?

时间:2013-03-04 22:16:20

标签: http powershell ssl-certificate guid netsh

我正在尝试使用来自powershell ps1文件的netsh http添加sslcert,但它一直在抛出错误:

$guid = [guid]::NewGuid()

netsh http add sslcert ipport=0.0.0.0:443 certhash=5758B8D8248AA8B4E91DAA46F069CC1C39ABA718 appid={$guid} 


'JABnAHUAaQBkAA' is not a valid argument for this command.
 The syntax supplied for this command is not valid. Check help for the correct syntax.

  Usage: add sslcert [ipport=]<IP Address:port>
         [certhash=]<string>
         [appid=]<GUID>
         [[certstorename=]<string>
          [verifyclientcertrevocation=]enable|disable
          [verifyrevocationwithcachedclientcertonly=]enable|disable
          [usagecheck=]enable|disable
          [revocationfreshnesstime=]<u-int>
          [urlretrievaltimeout=]<u-int>
          [sslctlidentifier=]<string>
          [sslctlstorename=]<string>
          [dsmapperusage=]enable|disable
          [clientcertnegotiation=]enable|disable]

参数:

    Tag                       Value

    ipport                  - IP address and port for the binding.
    certhash                - The SHA hash of the certificate. This hash
                              is 20 bytes long and specified as a hex
                              string.
    appid                   - GUID to identify the owning application.
    certstorename           - Store name for the certificate. Defaults
                              to MY. Certificate must be stored in the
                              local machine context.
    verifyclientcertrevocation - Turns on/off verification of revocation
                                 of client certificates.
    verifyrevocationwithcachedclientcertonly - Turns on/off usage of
                                               only cached client
                                               certificate for revocation checking.
    usagecheck              - Turns on/off usage check. Default is enabled.
    revocationfreshnesstime - Time interval to check for an updated
                              certificate revocation list (CRL). If this
                              value is 0, then the new CRL is updated
                              only if the previous one expires. (in
                              seconds)
    urlretrievaltimeout     - Timeout on attempt to retrieve certificate
                              revocation list for the remote URL.
                              (in milliseconds)
    sslctlidentifier        - List the certificate issuers that can
                              be trusted. This list can be a subset of
                              the certificate issuers that are trusted
                              by the machine.
    sslctlstorename         - Store name under LOCAL_MACHINE where
                              SslCtlIdentifier is stored.
    dsmapperusage           - Turns on/off DS mappers. Default is
                              disabled.
    clientcertnegotiation   - Turns on/off negotiation of certificate.
                              Default is disabled.

Remarks: adds a new SSL server certificate binding and corresponding client
         certificate policies for an IP address and port.

Examples:

     add sslcert ipport=1.1.1.1:443 certhash=0102030405060708090A0B0C0D0E0F1011121314 appid={00112233-4455-6677-8899
-AABBCCDDEEFF}

我可能错了,但我相信如何在powershell脚本文件中指定appid GUID。有人可以帮我解决错误吗?

3 个答案:

答案 0 :(得分:9)

Powershell解析cmd命令的方式存在问题。 这将成功执行命令:

$guid = [guid]::NewGuid()
$Command = "http add sslcert ipport=0.0.0.0:443 certhash=5758B8D8248AA8B4E91DAA46F069CC1C39ABA718 appid={$guid}"
$Command | netsh

答案 1 :(得分:3)

下面的代码可以使用,&这里用于调用带参数的程序,"appid={$guid}"使它传递字符串值。

& netsh http add sslcert ipport=0.0.0.0:443 certhash=5758B8D8248AA8B4E91DAA46F069CC1C39ABA718 "appid={$guid}"

答案 2 :(得分:2)

错误的原因是花括号必须使用反引号(`)进行转义。

以下命令可以在PowerShell命令行中使用:

这可以在PowerShell commadline中使用:

$AppId = [Guid]::NewGuid().Guid
$Hash = "209966E2BEDA57E3DB74FD4B1E7266F43EB7B56D"

netsh http add sslcert ipport=0.0.0.0:8000 certhash=$Hash appid=`{$Guid`}

重要的细节是用反引号(`)来逃避每个{}。

如果netsh引发错误,请尝试附加certstorename my

无需使用变量。它只是为了方便起见。