You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 06:42:02