Verknüpfte GPOs und OUs finden mit PowerShell

    Kostenloser Ratgeber: Sicherheit mit Gruppenrichtlinien. Tipps zum Einsatz von GPOs, Sicherheits-Features aktivieren, Funktionen blockieren. Download »

    (Anzeige)

    GPO-Verknüpfungen in der GruppenrichtlinienverwaltungBei einer großen Zahl an OUs und GPOs ist nicht leicht zu über­blicken, welche GPOs mit welchen OUs ver­knüpft sind. In Power­Shell lässt sich das mit relativ geringem Aufwand heraus­finden. Dabei kann man wahl­weise die OUs nach ver­linkten GPOs oder GPOs nach OUs filtern, mit denen sie ver­bunden sind.

    Grundsätzlich erhält man diese Information auch über GUI-Tools wie die Gruppen­richtlinien­verwaltung. 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.

    Anzeigen, welche GPOs mit einer OU verlinkt 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.

    Ermitteln, mit welchen OUs ein GPO verknüpft ist.

    Wenn man die beiden Funktionen in das PowerShell-Profil aufnimmt, dann stehen sie nach dem Start der Kommandozeile automatisch zur Verfügung.

    2 Kommentare

    Bild von Frank
    Frank sagt:
    20. März 2018 - 19:49

    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

    Bild von Wolfgang Sommergut
    20. März 2018 - 20:40

    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.