Tags: Active Directory, PowerShell, Reporting
Zu Dokumentationszwecken kann es erforderlich sein, einen Report zur Gruppenmitgliedschaft von allen oder ausgewählten Benutzern im Active Directory zu erstellen. PowerShell bietet mehrere Möglichkeiten, um gezielt User und Gruppen auszuwählen und das Ergebnis in eine CSV-Datei zu schreiben.
Grundsätzlich kann man auch aus GUI-Tools wie Active Directory-Benutzer und Computer entnehmen, 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 Gruppenmitgliedschaften 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 Ausgangspunkt, 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 standardmäß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 zugeordneten 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 Gruppenmitgliedschaft 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 Gruppennamen nicht zwangsläufig als Distinguished Name ausgeben muss, sondern wie im obigen Beispiel auch den einfacheren SamAccountName nehmen kann.
Täglich Know-how für IT-Pros mit unserem Newsletter
Ähnliche Beiträge
- ModernAD: Kostenloses Reporting-Tool für Active Directory
- 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
3 Kommentare
Schneller geht´s mit dem CMDlet "Get-ADGroupMember"
Z.B.
Get-ADGroupMember -identity "Gruppenname" | select name
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 entnehmen, 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".