PowerShell如何筛选IIS绑定中证书指纹属于指定数组的项
解决方案
核心原因
匹配失败的常见诱因有两个:
- IIS SSL绑定返回的证书指纹,和证书存储读取的证书指纹存在大小写、首尾不可见空白字符差异,导致
-in操作符匹配失效 - 筛选的过期证书仅读取了
webhosting存储区的内容,而IIS实际绑定的证书存放在LocalMachine\My存储区,导致对应指纹不在目标数组内
修复后的完整代码
# 步骤1:获取10天内即将过期的证书,同时读取webhosting和My存储区 $DaysToExpiration = 10 $expirationDate = (Get-Date).AddDays($DaysToExpiration) $ExpiringCerts = Get-ChildItem -Path Cert:\LocalMachine\webhosting, Cert:\LocalMachine\My | Where-Object {$_.notafter -le $expirationDate} # 输出即将过期证书信息确认 $ExpiringCerts | Format-table -Autosize Thumbprint, FriendlyName, NotAfter # 步骤2:统一处理目标指纹格式,避免格式差异导致匹配失败 $targetThumbprints = $ExpiringCerts.Thumbprint | ForEach-Object { $_.Trim().ToUpper() } # 步骤3:筛选IIS绑定记录 $certs = Get-ChildItem IIS:SSLBindings | Where-Object { $currentThumb = $_.Thumbprint.Trim().ToUpper() $currentThumb -in $targetThumbprints } | Sort-Object -Property {$_.Sites.Value} | Foreach-Object { [pscustomobject]@{ Site = $_.Sites.Value Thumbprint = $_.Thumbprint IPAddress = $_.IPAddress } } $certs
验证排查方法
如果执行后仍无结果,可运行以下代码对比两边指纹差异:
# 输出所有即将过期的证书指纹 Write-Host "=== 即将过期证书指纹列表:" $ExpiringCerts.Thumbprint | ForEach-Object { Write-Host "[$_]" } # 输出所有IIS绑定的证书指纹 Write-Host "`n=== IIS绑定证书指纹列表:" Get-ChildItem IIS:SSLBindings | ForEach-Object { Write-Host "[$($_.Thumbprint)]" }
对比输出的内容,确认是否存在相同的指纹值即可定位问题。
内容的提问来源于stack exchange,提问作者ecksfiftyone
相关产品推荐
相关产品推荐

