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

如何按过期天数排序SSO ADFS证书到期检测邮件列表?

调整ADFS证书到期检测脚本,按过期天数从多到少排序

以下是修改后的脚本,实现按证书过期相关天数从多到少排序(未过期的按剩余天数降序,已过期的按已过期天数降序,数值大的排在前面):

Clear
$Body = "<b>SSO Certificate Expiration:</b><br/>"

$ExpirationThreshold = 30
$CurrentDate = Get-Date
$ComparisonDate = $CurrentDate.AddDays($ExpirationThreshold)

# 获取信任关系并计算排序所需的属性
$Trusts = Get-AdfsClaimsProviderTrust | ForEach-Object {
    # 获取每个信任的最新令牌签名证书过期日期
    $latestCertExpDate = $_.TokenSigningCertificates.NotAfter | 
        Group-Object Name | 
        ForEach-Object { $_.Group | Sort-Object | Select-Object -Last 1 }

    # 计算天数:未过期为剩余天数,已过期为已过期天数
    $relatedDays = if ($latestCertExpDate -ge $CurrentDate) {
        ($latestCertExpDate - $CurrentDate).Days
    }
    else {
        ($CurrentDate - $latestCertExpDate).Days
    }

    # 输出包含所有必要属性的自定义对象
    [PSCustomObject]@{
        Name                    = $_.Name
        CertExpirationDate      = $latestCertExpDate
        RelatedExpirationDays   = $relatedDays
        IsExpired               = $latestCertExpDate -lt $CurrentDate
    }
} | Sort-Object -Property RelatedExpirationDays -Descending  # 按天数从多到少排序

# 构建邮件内容
foreach ($Trust in $Trusts) {
    if (-not $Trust.CertExpirationDate) { continue }

    if (-not $Trust.IsExpired -and $Trust.CertExpirationDate -lt $ComparisonDate) {
        $Body += "$($Trust.Name) cert expiring in: <b style='background-color:yellow'>$($Trust.RelatedExpirationDays)</b> days<br/>"
    }
    elseif ($Trust.IsExpired) {
        $Body += "$($Trust.Name) already expired (<b style='color:red'>$($Trust.RelatedExpirationDays)</b> days ago)<br/>"
    }
}

$Body += "<br/><br/><i>This Script Was Run From: $env:COMPUTERNAME</i>"

Write-Host "Sending Email"
Send-MailMessage -SmtpServer "*****" -Body $Body -Credential $PSCredSG -From "*****" -To "*****" -Subject "Expiring SSO Certs" -BodyAsHtml

核心修改说明:

  1. 保留日期类型并计算排序字段:不再将证书过期日期转为字符串,而是直接存储DateTime对象,同时新增RelatedExpirationDays字段存储剩余天数或已过期天数,为排序提供可靠数值依据
  2. 替换排序逻辑:移除原有的按名称排序,改为按RelatedExpirationDays降序排序,确保天数多的条目排在前面
  3. 优化邮件内容构建:新增IsExpired字段简化条件判断,避免重复的日期比较操作,提升脚本可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 16:45:16