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


    Tags: , ,

    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 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

    Täglich Know-how für IT-Pros mit unserem Newsletter

    Wir ver­wenden Ihre Mail-Adresse nur für den Ver­sand der News­letter.
    Es erfolgt keine per­sonen­be­zogene Auswertung.

    Bild von Wolfgang Sommergut

    Wolfgang Sommergut hat lang­jährige Erfahrung als Fach­autor, Berater und Kon­ferenz­sprecher zu ver­schie­denen Themen der IT. Da­ne­ben war er als System­ad­mi­ni­stra­tor und Con­sultant tätig.
    // Kontakt: E-Mail, XING, LinkedIn //

    Verwandte Beiträge

    Weitere Links

    3 Kommentare

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

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

    Bild von Wolfgang Sommergut

    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.

    Kleine Anmerkung:
    Die Aussage "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." kann zu Mißverständnissen führen.
    Die meisten grafischen Tools sind leider nicht in der Lage verschachtelte Gruppenmitgliedschaften aufzulösen, wodurch ein Benutzer in deutlich mehr Gruppen Mitglied sein kann, als das aus seinen Eintragungen in den GUI-Tools ersichtlich ist.
    Bsp. Benutzer und Computer zeigt zwei Gruppen an, Whoami /all liefert für denselben Benutzer gleich 9 Gruppen, in denen der Benutzer Mitglied ist. Will man also wissen, in welchen Gruppen ein Benutzerobjekt Mitglied ist, sind Tools wie "whoami /all", "GpResult /User Username /V" oder "Get-ADAccountAuthorizationGroup -Identity Username" besser geeignet als "AD Benutzer und Gruppen" oder das "AD Verwaltungscenter" sowie andere CMD-Tools wie "DSget" oder Net user Name /Domain".