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

如何使用Powershell实现域控制器证书到期前24小时邮件提醒

PowerShell 域控制器证书到期24小时内邮件通知实现方案

完整实现代码

# 1. 查询本地计算机个人存储区的证书,计算剩余有效天数
$expiringCerts = Get-ChildItem Cert:\LocalMachine\My `
   | Select-Object @{N='StartDate';E={$_.NotBefore}},
   @{N='EndDate';E={$_.NotAfter}},
   @{N='DaysRemaining';E={($_.NotAfter - (Get-Date)).Days}},
   @{N='Thumbprint';E={$_.Thumbprint}},
   @{N='Subject';E={$_.Subject}} `
   | Where-Object { $_.DaysRemaining -lt 1 -and $_.DaysRemaining -ge -7 } # 过滤到期不足24小时,以及过期7天内的证书,可自行调整阈值

# 2. 存在即将到期/已过期证书时发送邮件
if ($expiringCerts.Count -gt 0) {
    # 组装邮件正文
    $mailBody = @"
<p>以下域控制器证书即将在24小时内到期或已过期,请及时处理:</p>
<table border="1" cellpadding="5" cellspacing="0">
<tr>
<th>证书主题</th>
<th>指纹</th>
<th>生效日期</th>
<th>到期日期</th>
<th>剩余有效天数</th>
</tr>
"@
    foreach ($cert in $expiringCerts) {
        $mailBody += "<tr>
        <td>$($cert.Subject)</td>
        <td>$($cert.Thumbprint)</td>
        <td>$($cert.StartDate.ToString('yyyy-MM-dd HH:mm:ss'))</td>
        <td>$($cert.EndDate.ToString('yyyy-MM-dd HH:mm:ss'))</td>
        <td>$($cert.DaysRemaining)</td>
        </tr>"
    }
    $mailBody += "</table>"

    # 邮件配置,以下参数请根据实际环境修改
    $smtpServer = "你的SMTP服务器地址" # 例如域内Exchange服务器地址、企业SMTP网关地址
    $smtpPort = 25 # 常用端口:不加密25、SSL加密465、TLS加密587
    $enableSSL = $false # SMTP要求加密则设为$true
    $mailFrom = "证书监控通知 <alert@yourdomain.com>" # 发件人地址
    $mailTo = @("管理员1 <admin1@yourdomain.com>", "管理员2 <admin2@yourdomain.com>") # 收件人地址,多个用逗号分隔
    $mailSubject = "[告警] 域控制器证书即将到期,请及时处理"

    # 发送邮件,如果SMTP需要身份验证,可新增 -Credential 参数传入账号密码凭据
    Send-MailMessage -From $mailFrom `
        -To $mailTo `
        -Subject $mailSubject `
        -Body $mailBody `
        -BodyAsHtml `
        -SmtpServer $smtpServer `
        -Port $smtpPort `
        -UseSsl:$enableSSL
}

配置与使用说明

  • SMTP服务器适配:如果使用域内Exchange服务,需提前配置接收连接器允许当前域控制器的IP地址匿名发送邮件,避免邮件被拦截
  • 告警阈值调整:代码中Where-Object的过滤条件可按需修改,比如要提前7天收到通知,可把$_.DaysRemaining -lt 1改为$_.DaysRemaining -lt 7
  • 自动执行配置:可将该脚本添加到域控制器的计划任务中,设置每天定时执行1次,实现自动监控告警
  • 身份验证配置:如果SMTP服务要求账号验证,可在代码中添加凭据获取逻辑:$cred = Get-Credential,然后在Send-MailMessage命令中添加参数-Credential $cred
  • 测试方法:可以先修改过滤条件为$_.DaysRemaining -lt 30,确认有符合条件的证书时脚本可以正常发送邮件,再把阈值改回需求的24小时即可

内容的提问来源于stack exchange,提问作者Ruishoo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 08:54:04