Die Komponenten einer GPO und den Status von GPOs abfragen

Die Komponenten einer GPO und den Status von GPOs abfragen

Active Directory (AD) basierte Gruppenrichtlinienobjekte (Group Policy Object, kurz GPO) bestehen hauptsächlich aus zwei Komponenten: der logischen und der physikalischen Struktur. Der logische Teil wird in der AD-Datenbank (NTDS.dit) gespeichert und heißt Gruppenrichtliniencontainer (Group Policy Container, GPC). Die physikalische Komponente liegt im Dateisystem, im replizierten Verzeichnis SYSVOL, und heißt Gruppenrichtlinienvorlage (Group Policy Template, GPT).

In den Eigenschaften eines GPC stehen die AD-relevanten Konfigurationsdaten einer GPO, etwa der Pfad zur Vorlage (Attribut gPCFileSysPath), der Status (Attribut flags) oder die ACL, wer die GPO verwalten darf. Den GPC findet man in der Domänenpartition unter:

CN=Policies,CN=System,DC=<Domäne>

In der MMC Active Directory-Benutzer und -Computer (dsa.msc) wird der Container sichtbar, sobald unter Ansicht die „Erweiterten Features“ aktiviert sind. Die GPC erscheinen dort mit ihrer {GUID} – dieselbe GUID steht auch im GPT.

Im GPT liegen die meisten Einstellungen sowie Verzeichnisse und Konfigurationsdateien. Gespeichert wird das unter %windir%\SYSVOL\domain\Policies\{GUID}, nicht zu verwechseln mit den Junction Points unter %windir%\SYSVOL\sysvol\<Domäne>\Policies. Tools wie die GPMC nutzen die Junction Points, nicht den echten GPT-Pfad.

Unterschiedliche Replikation

GPC und GPT werden unterschiedlich repliziert. Der GPC läuft über die AD-Replikation. Das GPT kommt je nach Domänenfunktionsmodus vom FRS oder von DFS-R: bis einschließlich Windows Server 2003 FRS, ab einer Installation im Modus Windows Server 2008 DFS-R für SYSVOL.

Performance: ungenutzte Teile deaktivieren

Für die Client-Abarbeitung lohnt es sich, den nicht konfigurierten Teil einer GPO zu deaktivieren. Sitzt alles in der Benutzerkonfiguration, sollte die Computerkonfiguration aus sein – und umgekehrt. In der GPMC per Rechtsklick auf die GPO → Objektstatus, oder im Reiter Details.

Status über das Attribut flags

Den Status zeigt das Attribut flags am GPC:

  • 0 – Benutzer- und Computerkonfiguration aktiviert
  • 1 – Benutzerkonfiguration deaktiviert
  • 2 – Computerkonfiguration deaktiviert
  • 3 – gesamte GPO deaktiviert

GPO-Status: flags-Werte 0 bis 3

Alle GPOs mit Status:

Get-ADObject -Server <DC> -LDAPFilter "(flags=*)" -SearchBase "CN=Policies,CN=System,DC=<Domäne>" -SearchScope Subtree -Properties displayName,flags | Select displayName,flags | FT -A

Nur vollständig aktive GPOs (flags=0):

Get-ADObject -Server <DC> -LDAPFilter "(flags=0)" -SearchBase "CN=Policies,CN=System,DC=<Domäne>" -SearchScope Subtree -Properties displayName,flags | Select displayName,flags | FT -A

Benutzerkonfiguration deaktiviert (flags=1):

Get-ADObject -Server <DC> -LDAPFilter "(flags=1)" -SearchBase "CN=Policies,CN=System,DC=<Domäne>" -SearchScope Subtree -Properties displayName,flags | Select displayName,flags | FT -A

Computerkonfiguration deaktiviert (flags=2):

Get-ADObject -Server <DC> -LDAPFilter "(flags=2)" -SearchBase "CN=Policies,CN=System,DC=<Domäne>" -SearchScope Subtree -Properties displayName,flags | Select displayName,flags | FT -A

Komplett deaktiviert (flags=3):

Get-ADObject -Server <DC> -LDAPFilter "(flags=3)" -SearchBase "CN=Policies,CN=System,DC=<Domäne>" -SearchScope Subtree -Properties displayName,flags | Select displayName,flags | FT -A

Abfrage per Script

$auswahl = Read-Host "Welcher GPO-Status soll angezeigt werden (0=komplett aktiv, 1=Benutzer deaktiviert, 2=Computer deaktiviert, 3=komplett deaktiviert)" switch ($auswahl) { 0 { Get-ADObject -Server <DC> -LDAPFilter "(flags=*)" -SearchBase "CN=Policies,CN=System,DC=<Domäne>" -SearchScope Subtree -Properties displayName,flags | ForEach-Object { if ($_.flags -eq 0) { Write-Host "Gesamte GPO aktiviert: $($_.displayName)" } } } 1 { Get-ADObject -Server <DC> -LDAPFilter "(flags=*)" -SearchBase "CN=Policies,CN=System,DC=<Domäne>" -SearchScope Subtree -Properties displayName,flags | ForEach-Object { if ($_.flags -eq 1) { Write-Host "Benutzerkonfiguration deaktiviert: $($_.displayName)" } } } 2 { Get-ADObject -Server <DC> -LDAPFilter "(flags=*)" -SearchBase "CN=Policies,CN=System,DC=<Domäne>" -SearchScope Subtree -Properties displayName,flags | ForEach-Object { if ($_.flags -eq 2) { Write-Host "Computerkonfiguration deaktiviert: $($_.displayName)" } } } 3 { Get-ADObject -Server <DC> -LDAPFilter "(flags=*)" -SearchBase "CN=Policies,CN=System,DC=<Domäne>" -SearchScope Subtree -Properties displayName,flags | ForEach-Object { if ($_.flags -eq 3) { Write-Host "Gesamte GPO deaktiviert: $($_.displayName)" } } } default { Write-Host "Ungültige Eingabe" } }

Quelle: Yusuf Dikmenoglu, Die Komponenten einer GPO und den Status von GPOs abfragen (22. Mai 2011), Snapshot 19. Dezember 2019.