基于PowerShell的F5 SSL证书过期日期转换与30天告警需求
我来帮你搞定这个F5 SSL证书过期监控的需求,分两部分解决你的问题,最后给出完整的自动发邮件脚本:
1. 将Int32类型的expirationDate转换为日期并对比
这个expirationDate: 1531094399是Unix时间戳(从1970年1月1日00:00:00 UTC开始计算的秒数),在PowerShell里可以这样转换为本地日期并对比:
# 定义过期时间戳 $expirationTimestamp = 1531094399 # 转换为本地DateTime对象 $expirationDateFromTimestamp = [DateTimeOffset]::FromUnixTimeSeconds($expirationTimestamp).LocalDateTime # 获取当前本地时间 $currentDate = Get-Date # 计算剩余天数 $daysUntilExpiration = ($expirationDateFromTimestamp - $currentDate).Days
拿到$daysUntilExpiration后,就能直接判断证书是否即将过期了。
2. 将expirationString与当前时间对比
expirationString: Jul 8 23:59:59 2018 GMT是固定格式的日期字符串,需要用ParseExact方法指定格式解析,注意这里要指定英文文化信息,避免系统语言影响解析结果:
# 定义过期字符串 $expirationString = "Jul 8 23:59:59 2018 GMT" # 解析为DateTime对象(指定格式和文化信息) $expirationDateFromString = [DateTime]::ParseExact($expirationString, "MMM d HH:mm:ss yyyy GMT", [System.Globalization.CultureInfo]::GetCultureInfo("en-US")) # 转换为本地时间(按需调整) $expirationDateFromStringLocal = $expirationDateFromString.ToLocalTime() # 计算剩余天数 $daysUntilExpirationFromString = ($expirationDateFromStringLocal - (Get-Date)).Days
完整的PowerShell预警脚本(30天过期自动发邮件)
把上面的逻辑整合,加上邮件发送功能,脚本如下:
# -------------------------- 配置参数 -------------------------- # F5证书的过期信息(替换成从F5获取的实际值) $certExpirationTimestamp = 1531094399 $certExpirationString = "Jul 8 23:59:59 2018 GMT" # 预警阈值:30天 $warningThreshold = 30 # 邮件配置 $smtpServer = "your-smtp-server.com" $mailFrom = "cert-alert@yourdomain.com" $mailTo = "admin@yourdomain.com" $mailSubject = "⚠️ F5 SSL证书即将过期预警" # ------------------------------------------------------------- # 通过时间戳计算过期时间(两种方法选一种即可) $expirationDate = [DateTimeOffset]::FromUnixTimeSeconds($certExpirationTimestamp).LocalDateTime $currentDate = Get-Date $daysLeft = ($expirationDate - $currentDate).Days # 可选:通过字符串计算做结果验证 # $expirationDateFromString = [DateTime]::ParseExact($certExpirationString, "MMM d HH:mm:ss yyyy GMT", [System.Globalization.CultureInfo]::GetCultureInfo("en-US")).ToLocalTime() # $daysLeftFromString = ($expirationDateFromString - $currentDate).Days # 判断是否需要发送预警邮件 if ($daysLeft -le $warningThreshold -and $daysLeft -ge 0) { $mailBody = @" 您好, 检测到F5 SSL证书即将过期: - 证书过期日期:$($expirationDate.ToString("yyyy-MM-dd HH:mm:ss")) - 剩余天数:$daysLeft 天 请及时处理证书更新事宜。 "@ # 发送邮件 Send-MailMessage -SmtpServer $smtpServer -From $mailFrom -To $mailTo -Subject $mailSubject -Body $mailBody -BodyAsHtml Write-Host "预警邮件已发送成功" } elseif ($daysLeft -lt 0) { Write-Host "证书已过期,过期天数:$($daysLeft * -1) 天" } else { Write-Host "证书状态正常,剩余天数:$daysLeft 天" }
脚本说明
- 务必替换
# 配置参数部分的实际值,比如SMTP服务器地址、收件人邮箱等 - 两种日期转换方法选一种即可,也可以同时保留做结果验证
Send-MailMessagecmdlet需要PowerShell 5.1及以上版本支持,如果是较新版本的PowerShell,也可以用MailKit模块来发送邮件(更灵活)
内容的提问来源于stack exchange,提问作者Tarun Gupta
相关产品推荐
相关产品推荐

