使用 Get-AzPolicyState 提取 Azure Policy 报告信息

Extracting azure policy report information using Get-AzPolicyState

提问人:learner 提问时间:11/3/2023 最后编辑:KrishnaGlearner 更新时间:11/16/2023 访问量:91

问:

在这里看到了这篇文章,我发现它作为第一次开始非常有用。

我想做什么?

当我查看 Azure 策略时,我正在尝试提取显示策略符合性的报告。

对于每个策略,我都希望提取有关不合规资源总数的信息。对于每个不合规的资源,将有一个一行条目。

提取策略名称,即密钥保管库应启用删除保护、策略说明、资源名称(例如密钥保管库名称)、不合规资源的资源组、托管资源的订阅。

我做了什么?

Get-AzPolicyState -SubscriptionId 'xxx' -Filter " ComplianceState eq 'NonCompliant' and ResourceLocation ne 'eastus' and PolicyDefinitionReferenceId eq 'firewallshouldbeenabledonkeyvaultmonitoringeffect'"

我玩了一个下面的例子来过滤它PolicyDefinitionReferenceId

结果的显示方式不适用于我的报告,因为它需要使用 excel 或 csv 呈现,当我尝试将输出通过管道输送到表格时,我收到以下错误。azure 订阅有很多策略项,因此理想情况下,我正在尝试编写脚本,以便将其导出为 csv 或 excel。

Get-AzPolicyState : Operation returned an invalid status code 'BadRequest' (InvalidOrderByColumnInQueryString: The orderby column 'table' is not a valid column name.)

azure powershell azure-policy

评论

1赞 jdweng 11/3/2023
像这样使用括号:learn.microsoft.com/en-us/powershell/module/az.policyinsights/...

答:

0赞 Venkat V 11/6/2023 #1

结果的显示方式不适用于我的报告,因为它需要使用 excel 或 csv 呈现,当我尝试将输出通过管道输送到表格时,我收到以下错误。azure 订阅有很多策略项,因此理想情况下,我正在尝试编写脚本,以便将其导出为 csv 或 excel。

下面是更新的脚本,用于获取状态并将相同的结果发送到 。complianceAzure PolicyExcel

$subscriptionId = 'xxxxxxxxxxxxxxxxxx'
$nonCompliantPolicies = Get-AzPolicyState -SubscriptionId $subscriptionId -Filter " ComplianceState eq 'NonCompliant' and ResourceLocation ne 'eastus' and PolicyDefinitionReferenceId eq 'storageaccountshoulduseaprivatelinkconnectionmonitoringeffect'"

# Define a custom object for each non-compliant resource
$customObjects = $nonCompliantPolicies | ForEach-Object {
    [PSCustomObject]@{
        PolicyName = $_.PolicyDefinitionName
        ComplianceState = $_.ComplianceState
        ResourceType = $_.ResourceType
        ResourceGroup = $_.ResourceGroup
        SubscriptionId = $_. subscriptionId
        IsCompliant    = $_.IsCompliant 
        PolicyAssignmentScope =$_.PolicyAssignmentScope
    }
}

# Export the custom objects to a CSV file
$customObjects | Export-Csv -Path 'Azure_policy_compliance_report.csv' -NoTypeInformation

结果:

enter image description here

我已根据条件筛选了不合规的策略状态。然后,对于每个不合规的资源,创建一个包含所需信息的自定义对象,包括 Policy name、ComplianceState、ResourceType、ResourceGroup、Subscription ID 和 Is Compliant,然后使用 将这些自定义对象导出到文件中。CSVExport-Csv

Excel结果:enter image description here

0赞 KrishnaG 11/16/2023 #2

此处提到的 InvalidOrderByColumnInQueryString 错误是由于提供了名为“table”的无效列名。我能够通过运行以下命令来重现错误。

Get-AzPolicyState -SubscriptionId 'xxxxxxxxxxxxxxxxxxxxxxxx' -Filter " ComplianceState eq 'NonCompliant' and ResourceLocation ne 'eastus' and PolicyDefinitionReferenceId eq 'firewallshouldbeenabledonkeyvaultmonitoringeffect'" -OrderBy "table asc"

enter image description here

若要解决此错误,请提供有效的列名称,如 Timestamp、PolicyAssignmentName 等。有关详细信息,请参阅 Azure 文档。

另一方面,如果要查找将输出导出到 csv 的方法,请使用 Export-Csv cmdlet,如下所示。

Get-AzPolicyState -SubscriptionId 'xxxxxxxxxxxxxxxxxxxxxxxx' -Filter "ComplianceState eq 'NonCompliant'" | Select-Object PolicyDefinitionReferenceId, PolicyAssignmentName, PolicyDefinitionName, PolicySetDefinitionName, ResourceId, ResourceGroup, SubscriptionId | Export-Csv .\noncompliant_resources_output.csv

enter image description here

如果您对此主题有任何疑问,请告诉我。