Monday, August 17, 2026

Home / GPOOutline – The Shape of Your Group Policy

GPOOutline – The Shape of Your Group Policy

 

GPOOutline – The Shape of Your Group Policy

A practical, read-only PowerShell tool for documenting Group Policy across an Active Directory forest

GitHub: github.com/SanthoshSivarajan/GPOOutline

GPOOutline – self-contained Group Policy documentation report

Group Policy has been part of Active Directory environments for decades, but in many organizations it remains one of the least documented areas of the infrastructure.

Administrators may know individual GPOs and where some policies are linked, but getting a complete picture of how Group Policy is configured across an entire forest can still be difficult. Group Policy information lives in both Active Directory and SYSVOL, and understanding the environment requires bringing those pieces together.

That is the reason I created GPOOutline.

GPOOutline is a single-file, read-only PowerShell tool that documents how Group Policy is configured across an Active Directory forest and produces one self-contained HTML report. The goal is simple: show what is configured today, how it is connected, where it applies, and what the environment actually looks like.

Why GPOOutline?

Group Policy settings are spread across directory objects, SYSVOL files, links, filters, permissions, WMI filters, scripts, preferences, and inheritance rules. Looking at one GPO at a time does not always answer the broader operational questions.

GPOOutline is designed to help answer questions such as:

·         What GPOs exist across the forest?

·         Where is each GPO linked?

·         What applies to a particular OU?

·         Which policy wins when multiple GPOs configure the same setting?

·         Where is inheritance blocked or a link enforced?

·         Which GPOs are unlinked, empty, disabled, or otherwise have little runtime effect?

·         Who can edit or delegate a GPO?

·         What WMI filters, scripts, preferences, and client-side extensions are being used?

·         Are AD and SYSVOL versions consistent?

·         What Group Policy information should be understood before consolidation, migration, audit, or handover?

Design Philosophy

GPOOutline was intentionally built to keep collection simple, transparent, and portable.

It is a single PowerShell script. There is no installer, agent, database, RSAT requirement, GPMC requirement, ActiveDirectory module requirement, or GroupPolicy module requirement for normal collection. The tool reads Group Policy metadata through LDAP and reads policy configuration from SYSVOL. It does not modify Active Directory or SYSVOL.

The output is a self-contained HTML report that can be opened offline, plus a JSON state file that can be used to regenerate the report without touching the directory again.

GPOOutline collection running from PowerShell

What GPOOutline Records

1. Forest and Domain Context

The report starts with environment context, including forest and domain information, functional levels, domain controllers, PDC emulators, sites, trusts, SYSVOL replication method, and Central ADMX Store status. This provides the background needed to understand the Group Policy configuration that follows.

2. GPO Inventory and Scope of Management

GPOOutline provides a high-level inventory of the Group Policy environment, including GPO counts, links, enabled and disabled states, enforced links, and other scope-related information. This gives you a quick view before you move into individual GPOs.

GPO inventory and scope of management

3. Every GPO in Detail

Each GPO can be reviewed in detail, including identity, domain, GUID, timestamps, status, AD and SYSVOL versions, links, link order, enforcement, security filtering, delegation, WMI filters, client-side extensions, comments, and evidence paths. This helps reduce the need to move between several management interfaces just to understand one GPO.

Detailed GPO inventory and configuration view

4. Group Policy Settings

GPOOutline reads and documents the major Group Policy setting areas, including Administrative Templates, security settings, audit policy, scripts, software installation, folder redirection, and Group Policy Preferences. Administrative Template registry settings can be decoded and, where available, resolved to ADMX-friendly names.

5. OU Tree, Links, and Scope

Understanding a GPO by itself is only part of the story. GPOOutline builds an OU-based view so you can see where policies are linked, how link order is configured, where inheritance is blocked, and where enforced links affect processing.

OU tree with GPO links and inheritance context

6. Resultant Precedence

When multiple GPOs configure overlapping settings, the important question is which setting ultimately wins. GPOOutline computes resultant precedence using the normal Group Policy processing model, including site, domain, OU layering, nested OUs, link order, block inheritance, and enforced links.

Resultant Group Policy precedence by container

7. Loopback, Site Links, and Anomalies

Loopback processing can make Group Policy troubleshooting difficult, especially in RDS, Citrix, kiosk, shared-device, and administrative workstation scenarios. GPOOutline identifies loopback mode and scope. It also calls out site-linked GPOs and configuration anomalies such as unlinked, empty, disabled, mismatched, missing, or unreachable policy objects.

Loopback processing, site-linked GPOs, and orphan/anomaly views

8. Cross-Reference Mapping

Cross-reference views make it easier to answer both directions of the relationship: where is this GPO used, and which GPOs affect this container? GPOOutline provides GPO-to-container and container-to-GPO views to make those relationships easier to navigate.

GPO-to-container and container-to-GPO mapping

9. WMI Filters and Client-Side Extensions

GPOOutline identifies WMI filter usage and the client-side extensions used across the environment. This is useful for documentation, troubleshooting, consolidation, and understanding which processing components are actually in use.

WMI filter usage and client-side extension inventory

10. Behavior and Runtime Impact

The report also provides visibility into behavior-related areas such as processing characteristics, setting footprint, tattooing indicators, and GPOs that appear to have no runtime effect. These are documentation signals, not automatic recommendations to remove anything.

Tattooing indicators and GPOs with no runtime effect

What GPOOutline Does Not Do

GPOOutline is intentionally a documentation tool, not an assessment engine. It does not provide risk scoring, grades, health scores, traffic-light ratings, automatic remediation advice, endpoint scanning, or configuration changes. It records the current state and leaves interpretation and remediation decisions to an assessment or a human reviewer.

Common Use Cases

·         Active Directory and Group Policy documentation

·         Assessment preparation

·         GPO consolidation and cleanup planning

·         Intune migration discovery and planning

·         Mergers and acquisitions

·         Active Directory migration

·         Audit and compliance documentation

·         Operational handover and knowledge transfer

·         Troubleshooting scope, inheritance, filtering, precedence, and loopback

Requirements

·         Windows PowerShell 5.1 or PowerShell 7.x

·         Domain-joined Windows system, or another Windows host with line of sight to a domain controller when -Server and -Credential are used

·         LDAP connectivity to a domain controller

·         SMB access to SYSVOL for full setting collection

·         Write access to the output folder

·         No RSAT, GPMC, local administrator rights, or WinRM required for normal collection

Port

Service

Purpose

389/TCP

LDAP

Directory collection

88/TCP

Kerberos

Authentication

445/TCP

SMB

SYSVOL parsing

How to Use GPOOutline – Step by Step

Step 1 – Download the Tool

Download or clone the repository from: https://github.com/SanthoshSivarajan/GPOOutline

The primary script is GPOOutline.ps1. Copy it to a management workstation, jump box, or other Windows system that can reach the target Active Directory environment.

Step 2 – Open PowerShell

Open PowerShell and change to the folder containing the script.

cd C:\Tools\GPOOutline

Step 3 – Run a Standard Forest-Wide Collection

From a domain-joined system, the simplest run is:

.\GPOOutline.ps1

The script discovers the environment, validates connectivity, and begins collection. The console shows progress through the different collection phases.

Step 4 – Review the Output Files

A normal run creates three primary files:

GPOOutline_<forest>_<stamp>.html
GPOOutline_<forest>_<stamp>.state.json
GPOOutline_<stamp>.log

·         HTML report – the self-contained report you open in a browser.

·         State JSON – the complete collected dataset used to regenerate the report without reconnecting to AD.

·         Log file – structured collection details useful for troubleshooting and validation.

Step 5 – Open the HTML Report

Open the generated HTML file in a browser. The report is self-contained and does not require a web server, database, or connection back to Active Directory.

Additional Usage Examples

Run from a non-domain-joined machine:

.\GPOOutline.ps1 -Server dc01.contoso.com -Credential (Get-Credential)

Scope to specific domains and choose an output folder:

.\GPOOutline.ps1 -Domain corp.contoso.com,emea.contoso.com -OutputPath C:\Reports

Limit collection to an OU subtree:

.\GPOOutline.ps1 -SearchBase "OU=Europe,DC=contoso,DC=com"

Preview the size of the collection before running it:

.\GPOOutline.ps1 -WhatIfScope

Perform a fast metadata-only pass without SYSVOL setting collection:

.\GPOOutline.ps1 -SkipSysvol

Reduce concurrency for a busy environment:

.\GPOOutline.ps1 -MaxConcurrency 4 -ThrottleDelayMs 50

Regenerate the HTML report from a previously collected state file without touching Active Directory:

.\GPOOutline.ps1 -FromState .\GPOOutline_contoso_com_20260816_141500.state.json

Useful Parameters

Parameter

Purpose

-Server

Target domain controller or domain

-Credential

Alternate credentials; useful for non-domain-joined collection

-Domain

Limit collection to selected domains

-SearchBase

Limit OU/link collection to a subtree

-OutputPath

Choose output directory

-MaxConcurrency

Control parallel SYSVOL workers

-ThrottleDelayMs

Add delay between batches

-SkipSysvol

Metadata-only collection

-IncludeSites

Include site-linked GPOs

-ResolveAdmx

Resolve ADMX-friendly names

-WhatIfScope

Preview the collection work list

-FromState

Regenerate from an existing state file

-NoHtml / -NoState

Suppress one of the normal outputs

-ExcludeDC

Do not contact selected domain controllers

-ShowDetail

Show additional console detail

Where GPOOutline Fits in the Tool Family

I use four related tool families, each answering a different question:

Series

Question

Outline

What is configured right now?

Atlas

How is it structured, and what connects to what?

Canvas

What does it mean, and where should I look?

Lens

What changed since last time?

GPOOutline belongs to the Outline series. Its purpose is current-state documentation without scoring or remediation recommendations. ADOutline is the closest sibling for documenting the broader Active Directory forest. GPOLens is planned as a separate interpretation layer for Group Policy modernization and Intune migration scenarios.

More of My Work

·         GitHub – all tools and repositories

·         GPOOutline

·         ADOutline

·         ITUserGroup Community

·         SAG Business Group

·         Personal Website

·         Technical Blog

·         LinkedIn

·         Microsoft MVP Profile

Download GPOOutline

GPOOutline is available here: https://github.com/SanthoshSivarajan/GPOOutline

If you work with Active Directory and Group Policy, give it a try and review the report in your own environment. Feedback, testing, issue reports, and community contributions are always welcome.

“If someone asked you today to show them exactly how Group Policy is configured across your environment, could you?”

GPOOutline is designed to help you answer that question.

SS

Santhosh Sivarajan

Microsoft MVP · Identity & Cybersecurity Architect

Santhosh has 30+ years of hands-on enterprise experience in Identity and Access Management, Microsoft Entra ID, Active Directory, Microsoft 365 and Zero Trust architecture. He is the author of two books on Windows Server and security, and leads consulting, assessments and training at SAG Business Group.

0 comments:

Post a Comment

Popular Posts
Workstation Trust Relationship Issue Issue: You receive the following error message, when you try to login to the domain.  The security database on the server does not have ... ADMT Service Account - Permission and Configuration The ADMT service account needs to have proper permission in source and target domains.  You don’t need to use 2 separate accounts.  You can ... My First Peek into Microsoft Exchange 2010 By Santhosh Sivarajan Before I really dive into Exchange 2010, I thought I would install and play with it first. I took some screen shots and notes during the ins... ObjectSID and Active Directory What is an objectSID in Active Directory? When a new object is created in Active Directory, Domain Controller assigns a unique value used ... AD Group Report - List Group Members in Active Directory–PowerShell Script Updated Script - http://portal.sivarajan.com/2011/10/search-ad-collect-local-admin-group.html Script #1 This script... Add Users to a Group–PowerShell Script Purpose – Add users to a group from an input file – PowerShell V2 Script.  Input file – Input file (Users.csv) contains samAccountName in... User Account Migration and Merging – Part I (ADMT) Part I - User Account Migration and Merging Using ADMT Part II - User Account Migration and Merging Using QMM pre-creating user account ... User Account Migration and Merging – Part II (Quest Migration Manager) Part I - User Account Migration and Merging Using ADMT Part II - User Account Migration and Merging Using QMM Pre-creating user account in... Delete Stale or Inactive Computer Accounts from Active Directory Here is an easy way to identify and delete inactive or stale computers in an Active Directory environment.  Using the dsquery command you c... Converting PowerShell (PS1) to EXE / Standalone Application As we know, there many applications available to convert a PowerShell file to a standalone executable file.  Based on my experience, PowerSh...