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

请求协助:筛选30天内过期的应用注册并修复Teams告警空表问题

解决方案:筛选30天内过期的应用密钥/证书并修复Teams告警空表问题

一、筛选30天内即将过期的应用注册密钥与证书

基于微软官方脚本,添加过期时间过滤逻辑即可实现需求:

  1. 定义过期阈值(当前日期往后推30天):
$expirationThreshold = (Get-Date).AddDays(30)
  1. 获取应用注册并过滤符合条件的密钥、证书:
# 获取所有应用注册
$apps = Get-AzureADApplication -All $true

# 遍历应用,提取30天内过期的条目
$expiringItems = foreach ($app in $apps) {
    # 处理客户端密钥(secrets)
    foreach ($secret in $app.PasswordCredentials) {
        if ($secret.EndDate -le $expirationThreshold) {
            [PSCustomObject]@{
                AppName = $app.DisplayName
                Type = "Secret"
                Id = $secret.KeyId
                EndDate = $secret.EndDate
            }
        }
    }
    # 处理证书(certificates)
    foreach ($cert in $app.KeyCredentials) {
        if ($cert.EndDate -le $expirationThreshold) {
            [PSCustomObject]@{
                AppName = $app.DisplayName
                Type = "Certificate"
                Id = $cert.KeyId
                EndDate = $cert.EndDate
                Thumbprint = ($cert.CustomKeyIdentifier | ForEach-Object { $_.ToString("X2") }) -join ''
            }
        }
    }
}

# 验证筛选结果(可选)
$expiringItems | Format-Table AppName, Type, EndDate -AutoSize

核心逻辑是通过EndDate字段与阈值对比,同时将应用的DisplayName绑定到结果对象中,为后续Teams告警提供必要的应用名称数据。

二、修复Teams告警中应用名称为空的问题

空表问题通常是字段传递错误或Markdown表格格式错误导致,以下是修正后的完整告警代码:

修正后的Teams告警PowerShell代码

# 确认筛选结果存在
if ($expiringItems.Count -gt 0) {
    # 构造Markdown表格行
    $tableRows = $expiringItems | ForEach-Object {
        "| $($_.AppName) | $($_.Type) | $($_.EndDate.ToString('yyyy-MM-dd')) |"
    }
    # 拼接完整表格
    $tableContent = @"
| 应用名称 | 类型 | 过期日期 |
|----------|------|----------|
$($tableRows -join "`n")
"@

    # 构造Teams消息
    $teamsMessage = ConvertTo-Json @{
        text = "⚠️ 以下应用注册的密钥/证书将在30天内过期:`n`n$tableContent"
    }

    # 发送到Teams webhook(替换为你的webhook地址)
    $webhookUrl = "https://your-teams-webhook-url"
    Invoke-RestMethod -Uri $webhookUrl -Method Post -Body $teamsMessage -ContentType "application/json"
} else {
    # 无过期项时发送提示
    $teamsMessage = ConvertTo-Json @{
        text = "✅ 没有即将在30天内过期的应用注册密钥或证书。"
    }
    Invoke-RestMethod -Uri $webhookUrl -Method Post -Body $teamsMessage -ContentType "application/json"
}

排查要点

  • 验证$expiringItems的AppName字段:执行$expiringItems | Select-Object AppName,如果为空,检查$app.DisplayName是否有效(部分旧应用无DisplayName,可改用$app.AppId作为标识)。
  • 检查Markdown格式:确保表格表头与内容行的管道符|对齐,无遗漏。
  • 测试webhook连通性:先发送一条简单文本消息,确认Teams能正常接收。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 20:32:14