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
没有问题。