请求协助:筛选30天内过期的应用注册并修复Teams告警空表问题
解决方案:筛选30天内过期的应用密钥/证书并修复Teams告警空表问题
一、筛选30天内即将过期的应用注册密钥与证书
基于微软官方脚本,添加过期时间过滤逻辑即可实现需求:
- 定义过期阈值(当前日期往后推30天):
$expirationThreshold = (Get-Date).AddDays(30)
- 获取应用注册并过滤符合条件的密钥、证书:
# 获取所有应用注册 $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
相关产品推荐
相关产品推荐

