Active Directory: Gruppen und ihre Mitglieder als CSV-Report speichern mit PowerShell

    BenutzergruppeZu Dokumen­tations­zwecken kann es erfor­derlich sein, einen Report zur Gruppen­mit­gliedschaft von allen oder aus­gewählten Be­nutzern im Active Directory zu erstellen. PowerShell bietet mehrere Möglich­keiten, um gezielt User und Gruppen auszu­wählen und das Ergebnis in eine CSV-Datei zu schreiben.

    Grundsätzlich kann man auch aus GUI-Tools wie Active Directory-Benutzer und Computer ent­nehmen, welche Mitglieder eine Gruppe hat oder in zu welchen Gruppen ein bestimmter User gehört. An seine Grenzen stoßen diese Werkzeuge aber dann, wenn man viele Objekte untersuchen will und dabei vielleicht auch noch bestimmte Kriterien anlegen möchte.

    Mitglieder von Gruppen ausgeben

    Die Dokumentation der Gruppen­mitglied­schaften kann man von zwei Seiten angehen: Man schaut entweder, welche Benutzer eine Gruppe enthält oder umgekehrt, in welchen Gruppen ist ein Benutzer Mitglied ist.

    Sind Gruppen der Ausgangs­punkt, dann erhält man diese mit dem Cmdlet Get-ADGroup. Dabei hat man die Möglichkeit, das Ergebnis der Abfrage mit Hilfe der Parameter Filter, SearchBase oder GroupScope eingrenzen (siehe dazu: AD-Gruppen mit PowerShell anzeigen, erstellen und Benutzer hinzufügen).

    Für das Auslesen ihrer Mitglieder ist es wichtig, dass man den Aufruf um den Parameter

    -Properties member

    ergänzt, weil das Cmdlet diese Eigenschaft standard­mäßig nicht zurückgibt. Sie enthält die User in Form ihres Distinguished Name.

    Die Schwierigkeit besteht nun darin, den Namen der Gruppe und der Mitglieder mit einem Ausdruck auszugeben. Diese Aufgabe erledigt der Aufruf von Select-Object, das zuerst den Namen der Gruppe liefert und dann im zweiten Argument die Pipeline-Variable $_ an eine weitere Instanz von Select-Object übergibt, um die Eigenschaft member zu expandieren.

    Dieses Beispiel liest sämtliche Gruppen aus dem Active Directory aus erzeugt mit Hilfe einer Calculated Property die passenden Spalten­überschriften. Schließlich schreibt Export-Csv das Ergebnis in eine CSV-Datei.

    Gruppenmitgliedschaften von Benutzern auslesen

    Nähert man sich der Aufgabe von der Seite der Benutzer, um festzustellen, in welchen Gruppen sie enthalten sind, dann startet man mit Get-ADUser. Wie bei Get-ADGroup kann man die Abfrage anhand verschiedener Filter eingrenzen, um nur die erwünschten Objekte zu erhalten.

    Das folgende Beispiel geht wieder davon aus, dass man für sämtliche User dokumentieren möchte, in welchen Gruppen diese Mitglied sind. Um den Namen des Users und der ihm zugeord­neten Gruppen zusammen auszugehen, bedient sich der Befehl wieder des oben beschrieben Aufrufs von Select-Object:

    Nachdem das Attribut MemberOf die primäre Gruppe nicht enthält, fragt man beide über den Parameter Properties separat ab.

    Eine andere Variante zur Ermittlung der Gruppen­mit­gliedschaft von Benutzern bedient sich nicht der User-Attribute PrimaryGroup und MemberOf, sondern reicht die gefundenen User an das Cmdlet Get-ADPrincipalGroupMembership weiter. Dieses gibt auch die primäre Gruppe gleich an der ersten Position mit aus:

    Der Vorteil dieser Variante besteht darin, dass man die Gruppen­namen nicht zwangsläufig als Distinguished Name ausgeben muss, sondern wie im obigen Beispiel auch den einfacheren SamAccountName nehmen kann.

    Mitgliedschaften von Benutzern in AD-Gruppen mit Get-ADPrincipalGroupMembership ausgeben

    2 Kommentare

    Bild von Matthias
    Matthias sagt:
    5. September 2019 - 13:24

    Schneller geht´s mit dem CMDlet "Get-ADGroupMember"

    Z.B.
    Get-ADGroupMember -identity "Gruppenname" | select name

    Bild von Wolfgang Sommergut
    5. September 2019 - 13:32

    Das löst nur das halbe Problem. Man erhält damit nur eine Liste von Objekten, die Mitglied in der Gruppe sind. Aber für das Reporting wie oben beschrieben möchte man Gruppennamen und ihre Mitglieder in einer CSV-Liste.