checks/arm/policy-compliance.ps1

# CAF Govern — Azure Policy non-compliant resources per subscription (live state).
$items = @()
foreach ($s in Get-Subs) {
    try {
        $r = Invoke-AzRestMethod -Method POST -Payload '{}' `
            -Path "/subscriptions/$($s.Id)/providers/Microsoft.PolicyInsights/policyStates/latest/summarize?api-version=2019-10-01"
        if ([int]$r.StatusCode -ge 400) { continue }
        $c = ($r.Content | ConvertFrom-Json)
        $res = $c.value[0].results
        $nc = [int]$res.nonCompliantResources
        if ($nc -gt 0) {
            $items += [pscustomobject]@{
                Title  = $s.Name
                Detail = "$nc non-compliant resources across $([int]$res.policyAssignments) policy assignments | sub $($s.Id)"
            }
        }
    } catch { Write-Warning "policy compliance $($s.Name): $_" }
}
[pscustomobject]@{
    Name     = 'Azure Policy non-compliant resources'
    Severity = 'high'
    Fix      = 'Remediate non-compliant resources or add deployIfNotExists/modify remediation tasks; assign baseline policy initiatives at management-group scope.'
    Items    = $items
}