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

如何使用PowerShell获取特定资源与指定策略的Azure Policy合规报告

用PowerShell查询指定资源与策略的Azure Policy合规报告

前置要求

  • 提前安装Azure PowerShell的Az模块,优先使用Az.Resources 3.0及以上版本
  • 操作前先运行Connect-AzAccount登录目标Azure租户,确保账号持有Policy读取、资源读取权限

具体实现步骤(适配单台VM+Deny-Firewall自定义策略场景)

步骤1:获取目标VM的资源ID

替换占位符为你实际的VM信息,执行命令获取VM的唯一资源标识:

$vm = Get-AzVM -ResourceGroupName "<你的VM所属资源组名>" -Name "<你的VM名称>"
$targetResourceId = $vm.Id

步骤2:获取目标策略的定义ID

查询名为Deny-Firewall的自定义策略的ID:

$policyDef = Get-AzPolicyDefinition | Where-Object {$_.Properties.DisplayName -eq "Deny-Firewall" -and $_.Properties.PolicyType -eq "Custom"}
$targetPolicyId = $policyDef.Id

如果要查询的是策略集(Initiative)内的策略,将Get-AzPolicyDefinition替换为Get-AzPolicySetDefinition即可

步骤3:查询对应合规记录

按资源ID和策略ID两个条件过滤,获取精准的合规结果:

$complianceReport = Get-AzPolicyState -ResourceId $targetResourceId -Filter "PolicyDefinitionId eq '$targetPolicyId'"

步骤4:格式化输出合规报告

按需提取核心字段输出可视化结果:

$complianceReport | Select-Object @{Name="资源名称";Expression={$vm.Name}},
                                  @{Name="策略名称";Expression={"Deny-Firewall"}},
                                  @{Name="合规状态";Expression={$_.ComplianceState}},
                                  @{Name="最后评估时间";Expression={$_.Timestamp}},
                                  PolicyAssignmentName,
                                  PolicyAssignmentScope | Format-Table -AutoSize

常见问题说明

如果查询结果为空,通常是策略还未完成首次评估,或策略分配范围未覆盖当前VM。你可以手动触发资源组级别的策略评估,等待5-10分钟后再查询:

Start-AzPolicyComplianceScan -ResourceGroupName "<你的VM所属资源组名>"

合规状态字段说明:Compliant为合规,NonCompliant为不合规,NotApplicable为该策略不适用于当前资源。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 03:36:01