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

如何使用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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:09:03