To export compliance policy settings in Microsoft Intune, read each device compliance policy from Microsoft Graph and write out every setting it holds, 1 row per setting. Each platform has its own settings, so a Windows policy and an iOS policy have different columns. The tenant-wide compliance settings aren't part of any policy and need reading on their own.
| Method | Best fit |
|---|---|
| PowerShell | A CSV of every compliance policy's settings and values, 1 row per setting. |
| Admin centre | Reading 1 policy's settings in Microsoft's own words. |
| Altivane | Recommended for recurring reviews, with each policy's settings beside its assignments and failures in a workbook. |
Before you start
Use an Intune Administrator, or an account with an Intune role that can read device compliance policies, such as Read Only Operator. The tenant needs an active Intune licence. The PowerShell example requests DeviceManagementConfiguration.; your organisation may require administrator consent.
The policies are read live. The export covers the settings in each policy, not whether devices meet them, and not the tenant-wide settings such as how a device with no policy is marked. The examples read and export and change nothing.
Option 1
Export compliance policy settings with PowerShell
Install the modules once, then connect, read the policies and write out each setting.
# Install once, if the modules are not already installed.
Install-Module Microsoft.Graph.Authentication, Microsoft.Graph.DeviceManagement -Scope CurrentUser$ErrorActionPreference = 'Stop'
Connect-MgGraph -Scopes 'DeviceManagementConfiguration.Read.All' -NoWelcome
try {
$policies = @(Get-MgDeviceManagementDeviceCompliancePolicy -All)
$report = foreach ($policy in $policies) {
# Each platform's own settings arrive in AdditionalProperties.
$settings = $policy.AdditionalProperties
$platform = "$($settings['@odata.type'])" -replace '^#microsoft\.graph\.', ''
foreach ($name in ($settings.Keys | Sort-Object)) {
$value = $settings[$name]
if ($name -like '*@odata*' -or $null -eq $value) { continue }
if ($value -isnot [string] -and $value -is [System.Collections.IEnumerable]) {
$value = ConvertTo-Json -InputObject $value -Compress -Depth 4
}
[pscustomobject]@{
Policy = $policy.DisplayName
Platform = $platform
Setting = $name
Value = $value
}
}
}
$report = @($report)
if ($report.Count -eq 0) {
Write-Output 'No compliance policy settings were found.'
} else {
$file = './compliance-policy-settings.csv'
$report | Export-Csv -Path $file -NoTypeInformation -Encoding utf8
Write-Output "$($report.Count) settings of $($policies.Count) policies written to $file."
}
} finally {
Disconnect-MgGraph | Out-Null
}The CSV has 1 row for each setting of each policy, under Microsoft Graph's property name, such as passwordRequired or osMinimumVersion, with the platform taken from the policy's type, such as windows10CompliancePolicy. A list or a nested value is kept whole as JSON in Value. To compare 1 policy over time, filter the file on Policy and keep each month's copy.
Option 2
Read a compliance policy's settings in the admin centre
- Sign in to the Microsoft Intune admin centre for the correct tenant.
- Go to Devices and, under Manage devices, select Compliance.
- Select the policy. Intune opens its Monitor tab.
- Select the Properties tab to read each setting the policy configures, and its assignments. Leave Edit alone, so nothing changes.
This suits reading 1 policy in the words the admin centre uses. There's no export of the settings here, so a record of every policy, or a comparison from one month to the next, takes PowerShell or a report.
Option 3 ยท Recommended for recurring reviews
Export compliance policy settings with Altivane
- Open Altivane and choose the tenant.
- Run the Intune Compliance report.
- Open the tenant's Excel workbook and find Compliance Policy Settings: every configured setting of every compliance policy, with Policy, Platform, Setting and Value.
- Read Compliance Policies for each policy's assignment, its device counts and its actions for non-compliance, and Compliance Setting Failures for the settings devices fail most.
Altivane names each setting and choice in words where it knows them, rather than as Microsoft Graph writes them, and leaves out empty values and each policy's own name, description and dates. The same workbook lists the non-compliant devices and the settings each one fails, so the policy and its effect are read together.
Contact usCommon questions
Why does the export list settings nobody set?
Microsoft Graph returns every property of the policy's platform type, set or not, so a setting left Not configured still comes back with its default value. Read each value with Microsoft's settings reference for that platform beside it.
Where are the tenant-wide compliance settings?
Not in any policy. Mark devices with no compliance policy assigned as and Compliance status validity period (days) are under Endpoint security > Device compliance > Compliance policy settings in the Intune admin centre. Microsoft sets the validity period to 30 days by default.
Which devices fail these settings?
The settings say what a policy asks for; the devices' compliance states say who falls short. See how to find non-compliant devices in Microsoft Intune.
Microsoft references
Technical references checked on 7 November 2026. The example scripts have been reviewed and syntax checked; they have not been run against a live tenant.