Functions/Get-PolicyByResource.ps1
#Get all policies and group them by resources impacted #$MyReport = @() function Get-PolicyByResource { $Assignments = Get-AzPolicyAssignment $MyReport = ForEach ($Assignment in $Assignments) { If ($Assignment.Properties.PolicyDefinitionId.split('/') -contains 'policySetDefinitions') { #policy set ForEach ($policy in (Get-AzPolicySetDefinition -id $Assignment.Properties.PolicyDefinitionId).Properties.PolicyDefinitions.PolicyDefinitionId) { $item = Get-PolicyInfoHelper -PolicyDefinitionId $Policy $item.PolicySetId = $Assignment.Properties.PolicyDefinitionId $item.PolicySetDisplayName = $Assignment.Properties.DisplayName #$MyReport += $item $item } } Else { #Policy, not policy set #$MyReport += Get-PolicyInfoHelper -PolicyDefinitionId $Assignment.Properties.PolicyDefinitionId Get-PolicyInfoHelper -PolicyDefinitionId $Assignment.Properties.PolicyDefinitionId } } $MyReport } function Get-PolicyInfoHelper { [CmdletBinding()] param ( [Parameter()] [string] $PolicyDefinitionId ) $Definition = Get-AzPolicyDefinition -Id $PolicyDefinitionId $PolicyDefinitionJSON = az policy definition show -n (($PolicyDefinitionId -split ('/'))[-1]) $PolicyInfo = [PSCustomObject]@{ type = Find-EqualsInFile -file $PolicyDefinitionJSON PolicyDisplayName = $Definition.Properties.DisplayName PolicySetDisplayName = $Null PolicyDefinitionId = $Definition.PolicyDefinitionId PolicySetId = $Null } $PolicyInfo } Function Find-EqualsInFile { [CmdletBinding()] param ( [Parameter()] [array] $file ) ForEach ($Line in $file) { #Get-Content $filename) { If ($Null -eq $previousLine) { $previousLine = $Line } Else { If ($Line.Contains('"field":') -and $Line.Contains('"type"') -and $previousLine.Contains('"equals":')) { $previousLine.split(":")[1].trim(',').trim().trim('"') } ElseIf ($previousLine.Contains('"field":') -and $previousLine.Contains('"type"') -and $Line.Contains('"equals":')) { $Line.split(":")[1].trim(',').trim().trim('"') } $previousLine = $Line } } } |