How to get a GPO report using PowerShell

Last updated on:

Group Policy Objects (GPOs) control much of how an Active Directory (AD) environment behaves, from security baselines to drive mappings, so being able to document their settings is essential for audits, troubleshooting, and change reviews. A GPO report captures the full configuration of one or all of your GPOs in a readable file that you can save, share, or compare with others over time.

PowerShell handles this with the Get-GPOReport cmdlet, which exports a GPO's settings to an HTML or XML file. The cmdlet is quick and script-able, but it depends on the GroupPolicy module being installed and requires some scripting familiarity for anything beyond a single report. This guide walks through three ways to get a GPO report (using PowerShell, using the Group Policy Management Console (GPMC), and using ManageEngine ADManager Plus), including how to verify the applied policy and export reports in different formats.

  • PowerShell
  • GPMC
  • ADManager Plus
  • Why ADManager Plus
  • FAQs
 

What a GPO report contains and when you need one

A GPO report is a point-in-time export of a GPO's configuration: its policy settings, security filtering, WMI filters, delegation, links, and version numbers. Rather than clicking through the GPMC setting by setting, you can use a report to lay out everything a GPO does in one document, in either a human-readable HTML layout or a machine-readable XML structure you can parse programmatically.

Admins might generate a GPO report to hand auditors evidence of a security configuration, to document the environment before and after a change, to compare a GPO's settings across two points in time, or to troubleshoot why a policy is or isn't taking effect. The report itself is read-only, so producing one is a safe, non-disruptive way to inspect Group Policy without touching live settings.

How to get a GPO report using PowerShell

Prerequisites

The Get-GPOReport and Get-GPO cmdlets ship with the GroupPolicy module, which is part of the Remote Server Administration Tools (RSAT). Before you run any command, confirm the module is present. If it's not enabled, run the following PowerShell command on a Windows 10 or 11 workstation:

Add-WindowsCapability -Online -Name "Rsat.GroupPolicy.Management.Tools~~~~0.0.1.0"

On Windows Server, add the feature instead:

Install-WindowsFeature -Name GPMC

Then import the module into your session and confirm it loaded:

Import-Module GroupPolicy
Get-Module -Name GroupPolicy

Run PowerShell as an administrator from a domain-joined machine with rights to read the Group Policy. On a domain controller (DC), the module is present by default.

Generating an HTML report for a single GPO

HTML is the format to use when a person needs to read the report. Pass the GPO name, set -ReportType to HTML, and give -Path the output file location:

Get-GPOReport -Name "Default Domain Policy" -ReportType HTML -Path "C:\Reports\DefaultDomainPolicy.html"

This writes a formatted report of every setting in the Default Domain Policy GPO to the path you specify. If you'd rather identify the GPO by its globally unique identifier (GUID) instead of its name, use the -Guid parameter:

Get-GPOReport -Guid 31b2f340-016d-11d2-945f-00c04fb984f9 -ReportType HTML -Path "C:\Reports\GPO.html"

Generating a report for all GPOs in the domain

To document every GPO at once, set -All in place of a name. A single combined report of the whole domain's Group Policy is often what an audit calls for:

Get-GPOReport -All -Domain "corp.com" -ReportType HTML -Path "C:\Reports\AllGPOs.html"

The -Domain parameter takes the fully qualified domain name (FQDN) and is useful in multi-domain forests to target a specific domain. By default, the cmdlet queries the domain of the user running it.

Generating an XML report for automation

XML is the format to use when a script, not a person, will read the output. It exposes the same data in a structure PowerShell can parse directly:

Get-GPOReport -Name "Default Domain Policy" -ReportType XML -Path "C:\Reports\DefaultDomainPolicy.xml"

Once you have XML, you can cast it with the [xml] type accelerator and read values with dot notation—for example, to pull the GPO's name and version without opening the file:

[xml]$report = Get-Content "C:\Reports\DefaultDomainPolicy.xml"
$report.GPO.Name
$report.GPO.Computer.VersionDirectory

Exporting GPO data to a CSV for Excel

Get-GPOReport itself outputs only HTML or XML, so there is no direct CSV option. To get a spreadsheet, use Get-GPO to collect the GPO objects and export the properties you need with Export-Csv. This produces an Excel-ready summary of every GPO, including its GUID, status, and modification date:

Get-GPO -All -Domain "corp.com" |
Select-Object DisplayName, Id, GpoStatus, CreationTime, ModificationTime |
Export-Csv -Path "C:\Reports\GPO-Summary.csv" -NoTypeInformation

For a settings-level spreadsheet rather than a summary, you would generate XML reports and parse the specific nodes you want into custom objects before exporting them, which is more involved but keeps everything in PowerShell.

Troubleshooting common issues

  • The module was not found: If Import-Module GroupPolicy returns a Module was not found error, RSAT and its GPMC feature aren't installed. Run the appropriate installation command above and try again.
  • Access denied or an empty report: Running PowerShell without administrator rights or without permission to read a GPO produces an error or a report with missing sections. Run PowerShell as an administrator with an account that can read Group Policy.
  • The GPO name was not found: -Name must match the GPO's display name exactly, including spaces. If a name is ambiguous or mistyped, target the GPO with -Guid instead.
  • A blank HTML file: Passing a -Path in a folder that doesn't exist or that you can't write to can leave an empty or missing file. Confirm the directory exists and is writable before running the command.
  • The AD and SYSVOL versions don't match: This is a replication symptom and not a script error. Let replication converge or force it, then re-run the script.
  • A reported policy isn't being applied: This is a scope issue. Check the link scope, security filtering, and blocked inheritance, then verify policy application with gpresult.

Limitations of PowerShell

  • Scripting knowledge requirement: Bulk reports, CSV exports, and XML parsing all require familiarity with the GroupPolicy module and PowerShell.
  • Only HTML and XML output: Get-GPOReport cannot write to a CSV, a PDF, or Excel directly; any other format requires additional scripting or a separate tool.
  • No built-in scheduling: Producing reports on a recurring basis means wiring up Task Scheduler and maintaining the script yourself.
  • No delegation: Letting help desk staff run reports safely—scoped to certain OUs or domains—means building and securing wrapper scripts.

Supported parameters

The parameters below can be used for GPO reporting tasks in PowerShell:

Parameter Description
-Name The display name of the GPO to report on—it must match exactly
-Guid The GUID of the GPO, used instead of -Name to avoid ambiguity
-All Reports on every GPO in the domain rather than a single one
-ReportType The output format, either HTML or XML
-Path The file path where the report is saved
-Domain The FQDN of the domain to query, for multi-domain forests
-Server The specific DC to run the query against, such as the PDC emulator

How to get a GPO report using the GPMC

If you prefer a graphical approach, the GPMC produces the same HTML report and can also show the applied policy for a specific user or computer:

  1. Open the GPMC by running gpmc.msc.
  2. Expand your forest and domain, then select Group Policy Objects.
  3. Select the GPO you want to report on. On the right pane, open the Settings tab to view the full configuration.
  4. Right-click the GPO, click Save Report, then select HTML or XML and a location to export the same report the cmdlet produces.

To see the Resultant Set of Policy (RSoP), which is the combined effect of every GPO that applies to a particular user or computer, use the Group Policy Results wizard in the GPMC or run the gpresult command.

Limitations of the GPMC

  • One GPO at a time: The Save Report option exports a single selected GPO; there is no built-in way to export every GPO in one action.
  • HTML and XML only: Like PowerShell, the console exports data in only these two formats, with no CSV, Excel, or PDF option.
  • No scheduling or automation: The GPMC is entirely manual, so recurring or unattended reporting isn't possible from the console.

How to get a GPO report using ADManager Plus

ADManager Plus is a unified AD, Exchange, and Microsoft 365 management and reporting tool that produces GPO reports through a point-and-click console, with export options and scheduling that the native tools lack. It offers prebuilt reports for GPOs and their linked objects.

  1. Navigate to the Reports tab, click GPO Reports, and select your desired GPO report.
    GPO reports in ADManager Plus.
  2. Select your domain and click Generate.
  3. Use the Export As option to save the report in your preferred format, such as CSV, PDF, XLSX, HTML, or CSVDE.
    Generating a GPO report in ADManager Plus.

Schedule GPO reports to run automatically

Rather than running reports by hand, you can use ADManager Plus to generate reports on a schedule and email the results to stakeholders in the format you choose. This turns GPO documentation into a recurring, hands-off process, which is useful for periodic audits and compliance reviews.

How ADManager Plus helps you manage and report on Group Policy

ADManager Plus replaces scripts and recurring exports with a single console for AD, Microsoft 365, and Exchange management and reporting.

FAQ

To list every GPO in a domain, use the Get-GPO cmdlet with the -All parameter in PowerShell:

Get-GPO -All -Domain "corp.com"

This returns each GPO with its display name, GUID, and status. You can also see the full list under Group Policy Objects in the GPMC, or you can run the All GPOs and Linked AD Objects report in ADManager Plus for an exportable list.

Use the gpresult command to view the RSoP. Running gpresult /h report.html from an elevated Command Prompt session produces an HTML summary of every GPO applied to the current user and computer, including which were filtered out. The Group Policy Results wizard in the GPMC provides the same information graphically.

ADManager Plus provides a Resultant Set of Policy report that displays the Administrative Template settings, security settings, and GPO preferences applied to a selected user or computer.

GPO inheritance flows from the domain down through OUs and can be blocked at an OU. In the GPMC, select an OU and open the Group Policy Inheritance tab to see the order in which GPOs apply and whether inheritance is blocked.

In ADManager Plus, use the Direct and Inherited GPO Links report to view the GPOs linked directly to selected OUs and sites along with those inherited from parent containers up to the root domain. You can also use the GPO Inheritance Blocked Containers report to identify domains, sites, and OUs where GPO inheritance has been blocked.

Get-GPOReport only writes HTML or XML, so for a spreadsheet, collect the GPOs with Get-GPO and export the properties you want with Export-Csv:

Get-GPO -All | Select-Object DisplayName, Id, GpoStatus, ModificationTime | Export-Csv "C:\Reports\GPOs.csv" -NoTypeInformation

For a script-free option, ADManager Plus exports its GPO reports directly in CSV, XLSX, PDF, or HTML format from the console.

Report on and manage Group Policy with ADManager Plus

The one-stop solution to Active Directory Management and Reporting
Email Download Link Email the ADManager Plus download link