如何使用Powershell查询指定OU服务器IIS的SSL证书到期时间并过滤空Subject
PowerShell证书查询脚本修改方案
核心修改逻辑
你只需要在证书筛选环节新增Subject字段非空的判断条件即可过滤掉无有效Subject的RDP证书,同时可以优化原代码里冗余的重复选择逻辑,提升执行效率:
- 在原有到期时间判断的条件中,新增
$_.Subject非空判断,直接在第一步就过滤无效证书,减少后续处理量 - 合并重复的
Select-Object语句,避免重复计算到期天数 - 顺便修正原代码中进度条变量引用错误、计数器未初始化的小问题
修改后完整代码
$serverlist = $serverListpath.Name $threshold = 500 # 到期查询阈值,单位:天,可自行调整 $deadline = (Get-Date).AddDays($threshold) # 计算到期截止日期 $c = 0 # 进度计数器初始化 foreach($server in $serverlist){ if($server -like '#*') { continue } $p = ($c++/$serverlist.count) * 100 Write-Progress -Activity "正在检查 $server" -Status "已完成 $p %" -PercentComplete $p if(Test-Connection -ComputerName $server -Count 2 -Quiet){ # 远程查询证书并过滤有效结果 Invoke-Command -Verbose -ComputerName $server { Get-ChildItem Cert:\LocalMachine\My } | Where-Object { $_.NotAfter -le $deadline -and $_.Subject } | # 新增Subject非空过滤逻辑 Select-Object PSComputerName, Subject, NotAfter, @{ Label="Expires In (Days)" Expression={($_.NotAfter - (Get-Date)).Days} } | Export-Csv -Force -Append -Encoding ASCII -NoTypeInformation .\output\$day-ExpiringIISSSLCerts.csv } }
补充说明
原代码中$day变量已在用户配置文件$profile中定义为$day = Get-Date -Format yyyyMMdd,无需额外修改。如果需要进一步精准过滤IIS证书,也可以根据实际业务规则补充Subject的匹配规则,比如只保留包含特定域名后缀的结果。
内容的提问来源于stack exchange,提问作者Patrick Burwell
相关产品推荐
相关产品推荐

