测试路径IIS:\ SslBinding使用通配符dns名称抛出非法字符错误

时间:2015-09-14 22:32:23

标签: powershell iis wildcard windows-10 web-administration

Windows 10上的IIS10支持对通配符主机标头的SSL绑定,例如*.example.com

为通配符主机标头创建新的 SSL绑定工作正常,但是,当绑定存在时,Test-Path失败,在路径中抛出InvalidArgument“非法字符”例如Test-Path IIS:\SslBindings\!443!*.example.com

我尝试使用-LiteralPath以及-Path,但两者都给出了相同的错误 - ,但只有在绑定存在的情况下。测试不存在的路径会像您期望的那样返回$false

我错过了什么吗?或者这是Test-Path / WebAdministration中的错误?

example.ps1 (仅限Windows 10):

Import-Module WebAdministration

# test binding, create if missing
# fails on wildcard test when the binding exists
if (-not (Test-Path -LiteralPath IIS:\SslBindings\*!443!*.example.com))
{ 
    Push-Location Cert:\LocalMachine\My

    # find or create a certificate
    $targetCert = Get-ChildItem -Recurse | ? { ($_.NotAfter -gt (Get-Date)) -and ($_.DnsNameList -contains "*.example.com") } | Sort NotAfter -Descending | select -First 1
    if ($targetCert -eq $null)
    {
        $targetCert = New-SelfSignedCertificate -DnsName "*.example.com" -CertStoreLocation Cert:\LocalMachine\My
    }

    # bind to host header *
    $targetCert | New-Item -Path IIS:\SslBindings\*!443!*.example.com -SSLFlags 1

    Pop-Location
}

我目前使用的解决方法是:

if (-not (Get-ChildItem IIS:\SslBindings | ?{ $_.host -eq "*.example.com" -and $_.port -eq 443 }))
{
  ...
}

更新

值得注意的是Get-ChildItem IIS:\SslBindings\*!443!*.example.com没有问题。

0 个答案:

没有答案