Tags: PowerShell, Gruppenrichtlinien, Active Directory
Bei einer großen Zahl an OUs und GPOs ist nicht leicht zu überblicken, welche GPOs mit welchen OUs verknüpft sind. In PowerShell lässt sich das mit relativ geringem Aufwand herausfinden. Dabei kann man wahlweise die OUs nach verlinkten GPOs oder GPOs nach OUs filtern, mit denen sie verbunden sind.
Grundsätzlich erhält man diese Information auch über GUI-Tools wie die Gruppenrichtlinienverwaltung. Klickt man auf eine OU, dann sieht man in der Registerkarte Bereich, welche GPOs damit verknüpft sind. Umgekehrt funktioniert das auch, wenn man in der Baumansicht ein GPO auswählt.
Links zu GPOs als Eigenschaft von OUs
Arbeitet man viel auf der Kommandozeile von PowerShell, dann kann man sich dort die GPO-Verknüpfungen schneller anzeigen lassen als auf der GUI, wenn man für diesen Zweck die nötigen Funktionen definiert hat.
Sucht man nach den GPOs, die mit einer OU verbunden sind, dann gibt das Cmdlet Get-ADOrganizationalUnit unter anderem die Eigenschaft LinkedGroupPolicyObjects zurück. Es handelt sich dabei um ein Array, das man mit Select-Object und dem Schalter ExpandProperty aufsplitten kann.
Die folgende function nimmt als Parameter den Namen einer OU, die untersucht werden soll. Sie setzt die einfache Bezeichnung der OU in den Distinguished Name ein, wobei man diesen für die jeweilige Domäne erst anpassen muss. Ein regulärer Ausdruck extrahiert dann die GUID des GPO. Diese übergibt man dann dem Cmdlet Get-GPO, das schließlich den Namen des Objekts anzeigt.
Als Ergebnis erhält man somit eine simple Liste mit GPOs, die mit der betreffenden OU verbunden sind.
Die umgekehrte Frage nach den OUs, mit denen ein GPO verknüpft ist, lässt sich noch einfacher beantworten. Der function Get-LinkedOUs übergibt man den Namen des GPOs, für den Get-GPO die GUID ermittelt.
Anschließend durchläuft Get-ADOrganizationalUnit alle OUs und schaut mit Hilfe des match-Operators nach, ob die GUID in den LinkedGroupPolicyObjects enthalten ist. Wenn dies der Fall ist, gibt sie den Namen der OU aus.
Wenn man die beiden Funktionen in das PowerShell-Profil aufnimmt, dann stehen sie nach dem Start der Kommandozeile automatisch zur Verfügung.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
- Drucker abhängig vom Standort automatisch zuordnen
- Split-brain DNS in Active Directory einrichten
- AD-Konten mit DES- und RC4-Algorithmus für Kerberos-Verschlüsselung finden
- UserAccountControl: Sicherheitseinstellungen für AD-Konten prüfen und ändern
- Gruppen in Azure Active Directory mit PowerShell verwalten
Weitere Links
2 Kommentare
Moin
Interessante Funktion und noch interessantere Variable $matches.
Aber...
Regulärer Ausdruck wirft Fehler:
"\{(?.+)\}" wird analysiert - Unbekanntes Gruppierungskonstrukt
$Matches benötigt außerdem einen Index: $Matches[1]
...deshalb geändert wie folgt:
Function Get-LinkedGPOs([string] $OUName)
{
Get-ADOrganizationalUnit -Identity $OUName |
Select -ExpandProperty LinkedGroupPolicyObjects |
ForEach-Object `
{
$_ -match "{([0-9a-z].+)}" |
Out-Null
Get-GPO -Guid $Matches[1] |
Select-Object DisplayName
} #foreach
} #end function
Freundliche Grüße
Problem gefunden. Der HTML-Editor hat den Bezeichner für die Named Group eliminiert (also das ?<GUID>). Wenn man eine solche verwendet, dann braucht man keinen numerischen Index für $Matches.