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

如何通过PowerShell获取Azure策略的非合规资源及违规原因

整合Azure策略合规状态与策略定义的PowerShell脚本优化

问题背景

现有两个独立的PowerShell脚本:一个用于获取非合规的策略状态数据,但缺少违规资源的详情(如资源ID、名称)和具体违规原因;另一个用于导出策略定义信息,需要手动通过Excel的VLOOKUP关联策略引用ID才能拿到策略描述。需要将两者整合,通过单次查询获取所有所需数据,无需手动二次处理。

优化后的完整脚本

# 配置参数
$managementGroupName = 'xx'
$policySetName = 'xxx'
$outputPath = "C:\data\output_$(get-date -f dd-MM-yyyyHHMM).csv"

# 获取目标策略集定义,提取内部关联的策略引用
$policySet = Get-AzPolicySetDefinition -ManagementGroupName $managementGroupName -Name $policySetName
$policyRefMap = @{}
foreach ($ref in $policySet.Properties.PolicyDefinitions) {
    $policyDef = Get-AzPolicyDefinition -Id $ref.PolicyDefinitionId
    $policyRefMap[$ref.PolicyDefinitionReferenceId] = @{
        PolicyDisplayName = $policyDef.Properties.DisplayName
        PolicyDescription = $policyDef.Properties.Description
    }
}

# 获取非合规状态数据,关联策略定义信息并补充资源详情、违规原因
$complianceResults = Get-AzPolicyState -ManagementGroupName $managementGroupName -Filter "ComplianceState eq 'NonCompliant' and PolicySetDefinitionName eq '$policySetName'" `
    | Select-Object `
        Timestamp, `
        SubscriptionId, `
        ResourceLocation, `
        ResourceGroup, `
        ResourceId, `
        ResourceName, `
        PolicySetDefinitionName, `
        ManagementGroupIds, `
        PolicyDefinitionReferenceId, `
        ComplianceState, `
        PolicyDefinitionAction, `
        ResourceTags, `
        @{n='PolicyDisplayName';E={$policyRefMap[$_.PolicyDefinitionReferenceId].PolicyDisplayName}}, `
        @{n='PolicyDescription';E={$policyRefMap[$_.PolicyDefinitionReferenceId].PolicyDescription}}, `
        @{n='NonComplianceReason';E={$_.Properties.NonComplianceReason.Message}}

# 导出整合后的数据到CSV
$complianceResults | Export-Csv -NoTypeInformation -Path $outputPath

脚本说明

  1. 精准获取策略关联关系:先定位目标策略集,只提取该策略集内引用的策略定义,避免获取无关数据,提升查询效率
  2. 自动关联策略描述:通过哈希表存储策略引用ID与策略显示名、描述的映射,在获取合规状态时直接匹配,无需手动用Excel关联
  3. 补充关键缺失字段:
    • ResourceId/ResourceName:明确违规的具体资源
    • PolicyDisplayName/PolicyDescription:直接展示违规策略的名称和规则描述
    • NonComplianceReason:获取非合规的具体原因,清晰定位违规点

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 09:14:53