提问人:learner 提问时间:11/3/2023 最后编辑:KrishnaGlearner 更新时间:11/16/2023 访问量:91
使用 Get-AzPolicyState 提取 Azure Policy 报告信息
Extracting azure policy report information using Get-AzPolicyState
问:
我在这里看到了这篇文章,我发现它作为第一次开始非常有用。
我想做什么?
当我查看 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.)
答:
结果的显示方式不适用于我的报告,因为它需要使用 excel 或 csv 呈现,当我尝试将输出通过管道输送到表格时,我收到以下错误。azure 订阅有很多策略项,因此理想情况下,我正在尝试编写脚本,以便将其导出为 csv 或 excel。
下面是更新的脚本,用于获取状态并将相同的结果发送到 。compliance
Azure Policy
Excel
$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
结果:
我已根据条件筛选了不合规的策略状态。然后,对于每个不合规的资源,创建一个包含所需信息的自定义对象,包括 Policy name、ComplianceState、ResourceType、ResourceGroup、Subscription ID 和 Is Compliant,然后使用 将这些自定义对象导出到文件中。CSV
Export-Csv
Excel结果:
此处提到的 InvalidOrderByColumnInQueryString 错误是由于提供了名为“table”的无效列名。我能够通过运行以下命令来重现错误。
Get-AzPolicyState -SubscriptionId 'xxxxxxxxxxxxxxxxxxxxxxxx' -Filter " ComplianceState eq 'NonCompliant' and ResourceLocation ne 'eastus' and PolicyDefinitionReferenceId eq 'firewallshouldbeenabledonkeyvaultmonitoringeffect'" -OrderBy "table asc"
若要解决此错误,请提供有效的列名称,如 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
如果您对此主题有任何疑问,请告诉我。
评论