基于PowerShell脚本批量获取远程服务器SSL证书并导出至CSV的技术需求
批量获取远程服务器SSL证书并导出CSV的解决方案
这里给你一套适配200+服务器场景的PowerShell实现方案,既保留了你原有脚本的核心逻辑,又解决了批量远程执行和结果导出的需求:
完整可运行脚本
# 1. 定义你的远程服务器列表(也可以从文件导入,比如Get-Content .\servers.txt) $remotecomputers = "Server01","Server02","Server03" # 替换为你的服务器名/IP集合 # 2. 批量远程执行证书采集逻辑,同时处理连接异常 $certificateResults = Invoke-Command -ComputerName $remotecomputers -ScriptBlock { # 远程服务器上执行的证书筛选逻辑,补全了过期时间的正确筛选 Get-ChildItem -Path cert:\LocalMachine\My, cert:\LocalMachine\WebHosting ` -SSLServerAuthentication | Where-Object { $_.NotAfter -gt (Get-Date) } | # 选择关键字段,新增ComputerName方便区分服务器 Select-Object -Property @{Name='ComputerName';Expression={$env:COMPUTERNAME}}, PSPath, FriendlyName, NotAfter, Subject, Thumbprint, Issuer } -ErrorAction SilentlyContinue -ErrorVariable connectionErrors # 3. 将采集结果导出到CSV文件(UTF8编码避免乱码) $certificateResults | Export-Csv -Path ".\Remote_SSL_Certificates.csv" -NoTypeInformation -Encoding UTF8 # 可选:输出连接失败的服务器列表,方便排查 if ($connectionErrors) { Write-Host "以下服务器连接失败:" -ForegroundColor Red $connectionErrors.TargetObject | ForEach-Object { Write-Host $_ -ForegroundColor Yellow } }
关键细节说明
- 远程执行前置条件:确保你的账号拥有目标服务器的本地管理员权限,且目标服务器已启用WinRM服务(默认Windows Server会开启,若未开启可在目标机执行
Enable-PSRemoting -Force快速配置)。 - 修复时间筛选逻辑:你原有脚本里的
Where-Object {((Get-Date))}是无效的,我改成了$_.NotAfter -gt (Get-Date),用来筛选未过期的SSL证书,符合实际运维需求。 - 优化字段选择:新增了
ComputerName(标记证书所属服务器)、Subject、Thumbprint、Issuer这些实用字段,让导出的CSV信息更完整,方便后续分析。 - 大数量服务器适配:如果是200台服务器,建议加上
-ThrottleLimit 20参数(放在Invoke-Command里),控制并发连接数,避免对网络或服务器造成过大压力。 - 错误排查:脚本里用
-ErrorVariable connectionErrors收集了连接失败的服务器,执行完会自动输出,方便你后续处理异常机器。
可选扩展
如果你需要筛选即将过期的证书(比如30天内),可以把Where-Object的条件改成:
Where-Object { $_.NotAfter -lt (Get-Date).AddDays(30) -and $_.NotAfter -gt (Get-Date) }
内容的提问来源于stack exchange,提问作者Ronald
相关产品推荐
相关产品推荐

