Azure Policy合规统计与门户数值匹配问题求助(PowerShell)
解决Azure Policy不合规资源数量与门户匹配问题
核心问题原因
Get-AzPolicyState默认返回所有历史评估记录,导致同一资源-策略组合出现重复条目- 未对齐门户的筛选逻辑:门户会自动排除豁免资源,且仅统计最新评估状态的不合规项
修正后的PowerShell脚本
步骤1:获取去重后的最新不合规状态记录
# 按需替换Scope为订阅ID/管理组ID,默认是当前订阅 $targetScope = "/subscriptions/你的订阅ID" # 获取非合规、未豁免的最新策略状态,按资源+策略去重 $cleanPolicyStates = Get-AzPolicyState -Scope $targetScope ` -Filter "ComplianceState eq 'NonCompliant' and IsExcluded eq false" ` -SortBy "Timestamp desc" | Group-Object -Property ResourceId, PolicyDefinitionId | ForEach-Object { $_.Group[0] } # 保留每个资源-策略对的最新记录
步骤2:按政策集分组统计(匹配门户展示)
# 按政策集名称分组统计不合规资源数量 $complianceSummary = $cleanPolicyStates | Group-Object -Property PolicySetDefinitionName | ForEach-Object { [PSCustomObject]@{ 政策集名称 = $_.Name 不合规资源数 = $_.Count } } # 输出结果 $complianceSummary
关键逻辑说明
- 筛选豁免资源:通过
IsExcluded eq false排除门户中标记为豁免的资源,和门户统计逻辑一致 - 去重历史记录:按
ResourceId和PolicyDefinitionId分组,只保留最新的评估记录,避免重复统计 - 范围对齐:确保
-Scope参数和你在门户中查看的范围(订阅/管理组)完全一致
内容的提问来源于stack exchange,提问作者learner
相关产品推荐
相关产品推荐

