可行,PowerShell可通过.NET获取网站SSL证书的NotAfter时间,与当前UTC时间比较剩余天数,低于阈值时用Send-MailMessage发邮件或弹窗提醒,并可配置为Windows定时任务每日运行。
直接用 powershell 脚本检查网站 ssl 证书剩余有效期,并在低于阈值时发邮件或弹窗提醒,是完全可行的。关键在于获取远程服务器的证书、提取有效截止时间、对比当前时间,再触发预警动作。
获取并解析目标网站的 SSL 证书
PowerShell 本身不提供直接“抓 HTTPS 证书”的 cmdlet,需借助 .NET 的 System.Net.HttpWebRequest 或更稳妥的 [Net.ServicePointManager]::ServerCertificateValidationCallback 配合 TCP 连接模拟握手。推荐使用以下方式建立无错误连接并提取证书:
- 创建一个临时的 HTTPS 请求(禁用证书验证避免因过期被拒),强制完成 TLS 握手
- 从响应的 ServicePoint 中读取
Certificate属性,转为X509Certificate2对象 - 调用
NotAfter属性获取到期时间(注意:这是 UTC 时间,需转换或统一按 UTC 比较)
设置预警阈值并计算剩余天数
定义一个“提前预警天数”,比如 15 天。脚本每次运行时,用证书的 NotAfter 减去当前时间(建议统一用 [DateTime]::UtcNow),得到 TimeSpan,再取 .Days 向下取整:
- 若结果 ≤ 0:证书已过期
- 若结果 ≤ 预警天数(如 15):进入预警流程
- 建议保留缓冲(如只对 ≤14 的才发邮件),避免每天重复通知
发送邮件预警(无需 Outlook)
用 Send-MailMessage 即可,前提是配置好 SMTP 服务器(如公司 Exchange、腾讯企业邮箱、Mailgun 等):
-
-SmtpServer填 SMTP 地址(如 smtp.exmail.qq.com) -
-Port通常为 587(STARTTLS)或 465(SSL) -
-UseSsl和-Credential必须配合(账号密码需提前存为PSCredential对象) - 邮件正文应包含域名、到期日期、剩余天数、证书颁发者,便于快速定位问题
作为定时任务长期运行
把脚本保存为 Check-SSLCert.ps1,然后通过 Windows 任务计划程序每日执行:
- 触发器设为每天上午 9:00
- 操作中“启动程序”填
powershell.exe,参数写:
-ExecutionPolicy Bypass -File "D:\Scripts\Check-SSLCert.ps1" - 务必勾选“不管用户是否登录都要运行”和“使用最高权限”
- 可加日志记录:在脚本末尾追加
"$(Get-Date): OK" | Out-File -FilePath D:\Logs\sslcheck.log -Append


















