AD-Gruppen mit PowerShell anzeigen, erstellen und Benutzer hinzufügen


    Tags: ,

    BenutzergruppeDas PowerShell-Modul für Active Directory enthält eine Reihe von Cmdlets, die ein weitgehendes Management von AD-Gruppen erlaubt. Dazu zählen das Auflisten von Gruppen und ihrer Mitglieder, das Anlegen von neuen Gruppen und das Hinzufügen bzw. das Entfernen von Benutzern und Computern.

    Die Cmdlets des AD-Moduls eignen sich nicht bloß für die Verwendung in Scripts, sondern ersetzen auch im interaktiven Modus altbekannte Kommandozeilen-Tools wie dsquery, dsget, dsadd oder dsmod.

    Gruppen filtern mit Get-ADGroup

    Möchte man sich einen Überblick über bestehende Gruppen im Active Directory machen, dann dient das Cmdlet Get-ADGroup diesem Zweck. Wesentlich bei seiner Verwendung ist der erforderliche Parameter -Filter, mit dem sich das Ergebnis nach verschiedenen Kriterien eingrenzen lässt (möchte man einfach alle Gruppen ausgeben, dann verwendet man -Filter *).

    Zu den typischen Attributen, mit denen man die Anzeige auf bestimmte AD-Gruppen reduziert, zählen GroupScope und GroupCategory. Ersteres erlaubt die Filterung nach globalen, domänenlokalen und universalen Gruppen. Folgt man den Best Practices (AGULP) und nimmt Benutzerkonten nur in globale Gruppen auf, dann kann man diese für das User-Management so auflisten:

    Get-ADGroup -Filter "GroupScope -eq 'Global'"

    Da man zumeist nur an Security- und nicht an Distributionsgruppen interessiert ist, kann man das Ergebnis durch Anpassung des Filters zusätzlich einschränken:

    Get-ADGroup -Filter "GroupScope -eq 'Global' -and GroupCategory -eq 'Security'"

    Die Standardausgabe zeigt 8 Eigenschaften der Gruppen, darunter ihren Namen, den Distinguished Name und die SID. Benötigt man weitere Attribute, wie zum Beispiel ihre Mitgliedschaft in anderen Gruppen, dann kann man diese zusätzlich über den Schalter -Properties anfordern:

    Get-ADGroup -Filter "GroupScope -eq 'Global'" -Properties MemberOf

    Will man nur sehen, welche Eigenschaften von Gruppen überhaupt zur Verfügung stehen, dann gibt man -Properties * an.

    Neue Gruppe anlegen

    Möchte man eine neue AD-Gruppe erzeugen, dann verwendet man dafür das Cmdlet New-ADGroup. Bei seinem Aufruf kann man gleich die Werte für eine Reihe von Attributen für die neue Gruppe setzen, aber verpflichtend ist nur die Angabe von GroupScope und Name. Eine einfache Anwendung des Cmdlets könnte somit so aussehen:

    New-ADGroup -Name PS-Test -GroupScope DomainLocal

    Dieses Beispiel legt eine neue Security-Gruppe (Sicherheitsgruppen sind die Vorgabe, wenn der Parameter -GroupCategory fehlt) namens PS-Test innerhalb des Containers Users an. Zieht man einen anderen Pfad vor, dann muss man diesen als Distinguished Name an den Parameter -Path übergeben. Zusätzlich kann man über -Description, -DisplayName oder -ManagedBy die entsprechenden Attribute mit Werten belegen.

    Mitglieder von AD-Gruppen auslesen

    In der Regel möchte man AD-Gruppen nicht nur auflisten, sondern darüber hinaus anzeigen, welche Mitglieder sie enthalten und gegebenenfalls neue hinzufügen.

    Um herauszufinden, welche Mitglieder eine Gruppe enthält, verwendet man das Cmdlet Get-ADGroupMember. Im einfachsten Fall spezifiziert man den Namen einer AD-Gruppe über den Parameter -Identity, um ihren Inhalt abzurufen:

    Get-ADGroupMember -Identity Administratoren

    In diesem Beispiel erfährt man, welche User Mitglied in der Gruppe Administratoren sind. Allerdings wird man nicht immer den Namen einer einzelnen Gruppe angeben, sondern die Mitglieder von Gruppen ermitteln wollen, die man über Get-ADGroup erhalten hat. In diesem Fall kann man das Ergebnis von Get-ADGroup über eine Pipe an Get-ADGroupMember übergeben.

    Folgendes Beispiel überprüft, welche User nicht über enthaltene Gruppen, sondern direkt als Mitglieder einer domänenlokalen Gruppe eingetragen wurden:

    Get-ADGroup -Filter "GroupScope -eq 'DomainLocal'" | Get-ADGroupMember | where {$_.ObjectClass -eq "user"}

    Will man auch die Mitglieder von verschachtelten Gruppen anzeigen, dann ergänzt man Get-ADGroupMember um den Parameter -Recursive.

    Benutzer in AD-Gruppen aufnehmen

    Für diese Aufgabe bietet das Modul Active Directory zwei Cmdlets an, nämlich Add-ADGroupMember und Add-ADPrincipalGroupMembership. Ersteres ist für einfachere Operationen gedacht, weil es den großen Nachteil hat, dass man ihm keine Werte über eine Pipe zukommen lassen kann.

    Daher muss man ihm die Namen von Benutzern, die in eine Gruppe aufgenommen werden sollen, als Komma-separierte Liste über den Parameter -Members mitteilen. Die Mitglieder lassen sich wahlweise über ihren Namen, ihre GUID, SID oder den Destinguished Name spezifizieren:

    Add-ADGroupMember -Identity PS-Test -Members ACon,JEvans

    Dieses Beispiel nimmt die User ACon und JEvens anhand ihres Namens in die Gruppe PS_Test auf.

    Dagegen erlaubt Add-ADPrincipalGroupMembership, dass man Benutzer mit Hilfe von Get-ADUser unter Verwendung diverser Filter ermittelt und dann über eine Pipe durchreicht.

    Das Entfernen von Objekten aus AD-Gruppen geschieht mit Hilfe von Remove-ADGroupMember, dessen Aufruf analog zu jenem von Add-ADGroupMember erfolgt.

    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

    6 Kommentare

    Hallo!
    Ich versuche gerade User mit Powershell zu erstellen.
    Dabei ist mir aufgefallen, dass es immer (in vielen Foren) heißt, Gruppen einen oder mehrere User hinzuzufügen.
    Meist ist es (bei mir zumindest) der Fall, dass diverse Gruppen schon bestehen zu denen der User hinzugefügt werden soll.
    Also eher umgekehrt. Ich hoffe ich habe mich verständlich ausgedrückt.
    Ein neuer Mitarbeiter soll anfangen und bestimmten Gruppen zugeordnet werden. Gibt es eine Möglichkeit einem User gleich mehrere Gruppen zu zu ordnen?

    Vielen Dank!
    RD

    Ich habs gefunden... :-)

    Add-ADPrincipalGroupMembership -Identity -MemberOf Gruppe1,Gruppe2,Gruppe3

    Hi, wie kann ich mir mit diesem Befehl:
    Get-ADGroup -Filter "GroupScope -eq 'DomainLocal'" | Get-ADGroupMember | where {$_.ObjectClass -eq "user"}
    auch den Gruppennamen ausgeben lassen?
    Danke.

    Bild von Wolfgang Sommergut

    Die (späte) Antwort auf diese Frage gibt mein Beitrag über den Export der Mitgliedschaften in eine CSV-Datei.

    Guten Tag,
    kann man auch einen Benutzer gleichzeitig in mehrere Gruppen hinzufügen?

    Bild von Wolfgang Sommergut

    Der Parameter Identity von Add-ADGroupMember akzeptiert nur eine Gruppe als Wert. Daher müsste man eine Schleife nach diesem Muster bauen, um einen User in mehrere Gruppen aufzunehmen:

    Get-ADGroup -Filter * | ? { ($_.name -like "*work*") -or ($_.name -like "tes*")} |
    Add-ADGroupMember -Members Acon