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

如何修改PowerShell代码让Get-AzPolicyState返回策略显示名称而非GUID

解决方案

要获取策略的显示名称而非GUID,需要通过Get-AzPolicyDefinition查询策略定义的元数据,将策略ID(即原代码中的PolicyDefinitionName)映射为友好的显示名称。推荐预先缓存所有策略定义的映射关系,避免重复调用API影响效率。

修改后的完整代码:

$subscriptionId = 'abc'

# 预先获取当前订阅内所有策略定义,建立ID到显示名称的映射哈希表
$policyDefinitions = Get-AzPolicyDefinition -SubscriptionId $subscriptionId
$policyNameMap = @{}
foreach ($policy in $policyDefinitions) {
    $policyNameMap[$policy.Name] = $policy.Properties.DisplayName
}

# 获取非合规策略状态
$nonCompliantPolicies = Get-AzPolicyState -SubscriptionId $subscriptionId 

# 生成包含策略显示名称的自定义对象
$customObjects = $nonCompliantPolicies | ForEach-Object {
    # 从映射表中获取显示名称,若找不到则保留原ID作为 fallback
    $displayName = $policyNameMap[$_.PolicyDefinitionName] ?? $_.PolicyDefinitionName
    
    [PSCustomObject]@{
        PolicyName = $displayName
        ComplianceState = $_.ComplianceState
        ResourceType = $_.ResourceType
        ResourceGroup = $_.ResourceGroup
        SubscriptionId = $_.SubscriptionId  # 修正原代码中的空格问题
        IsCompliant = $_.IsCompliant 
        PolicyAssignmentScope = $_.PolicyAssignmentScope
    }
}

# 输出结果
$customObjects | Format-Table -AutoSize

关键说明

  • 映射哈希表:通过Get-AzPolicyDefinition一次性拉取所有策略定义,构建ID -> DisplayName的映射,后续循环直接查表,大幅减少API调用次数。
  • Fallback处理:使用??空合并运算符,确保如果策略定义未找到(比如内置策略或跨订阅策略),仍能显示原ID,避免字段为空。
  • 修正语法问题:原代码中$_. subscriptionId存在多余空格,已修正为$_.SubscriptionId,避免运行报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:46:02