Powershell Basics im Active Directory Part 2

Im ersten Teil dieser Serie haben wir uns angeschaut, wie man einfache Abfragen gegen das Active Directory machen kann. In diesem Teil wollen wir nun herausfinden, was wir für Aktionen mit den User-Abfragen machen können.

Nachdem wir nun wissen, wie wir Benutzer mithilfe des „Get-ADUser“ Befehls finden können, können wir uns auch überlegen viele Benutzer beispielsweise in Gruppen zu stecken.

Viele User in eine Gruppe aufnehmen

Nehmen wir an, ich möchte gerne alle Mitarbeiter der Abteilung „IT“ in eine Gruppe namens „IT-Mitarbeiter“ stecken. Als erstes würde ich mir in diesem Fall gerne mal anschauen, wer momentan in der Gruppe „IT-Mitarbeiter“ ist:

Get-ADGroupMember "IT-Mitarbeiter"

Wie kann ich jetzt alle Benutzer der Abteilung in die Gruppe stecken? Dazu muss ich erst herausfinden, was alle User der IT-Abteilung gemeinsam haben. Schauen wir uns doch nochmal an, welche Attribute es innerhalb eines Benutzers gibt:

Get-ADUser "LLange" -Properties *
#Zur Wiederholung: mit -Properties * zeige ich mir alle Attribute des Users an

Hier findet sich ein Attribut namens „Department“! Department ist die englische Übersetzung für Abteilung, hier steht bereits „IT“ bei allen Benutzern drin.

Was gilt es also nun zu tun? Richtig, alle User anzeigen lassen, bei denen „IT“ in Department eingetragen ist. Dazu benutzen wir die Vergleichsoperatoren aus dem ersten Teil:

Get-ADUser -Filter {Department -eq "IT"}
#Zeige Alle User, deren Attribut Department IT entspricht

Nun haben wir eine Liste mit Usern, die wir gerne in die Gruppe aufnehmen wollen. Da wir bereits den Befehl „Get-ADGroupmember“ kennen, suchen wir doch einfach mal nach weiteren ähnlichen Befehlen. Dazu gibt es in der Powershell den Befehl „Get-Command“, um alle verfügbaren Befehle anzuzeigen

Get-Command

#Um direkt spezifischer zu suchen, kann ich auch einen gewünschten Befehl anzeigen lassen:
#Der Befehl wird vermutlich irgendetwas mit "ADGroup" heißen, deshalb suche ich mit Sternchen nach dem Befehl:
Get-Command *ADGroup*

Hier gibt es einen Befehl „Add-ADGroupMember“, das klingt doch perfekt! Wir können also alle User abfragen und anschließend mit der Pipe an den zweiten Befehl weiterreichen. Schauen wir uns mal die Hilfe zu dem Befehl an:

Get-Help Add-ADGroupMember

<#
SYNTAX
    Add-ADGroupMember [-Identity] <ADGroup> [-Members] <ADPrincipal[]> [-AuthType {Negotiate | Basic}] [-Credential <PSCredential>] [-Partition <String>] [-PassThru] [-Server <String>] [-Confirm] [-WhatIf] [<CommonParameters>]


BESCHREIBUNG
    The Add-ADGroupMember cmdlet adds one or more users, groups, service accounts, or computers as new members of an Active Directory group.

    The Identity parameter specifies the Active Directory group that receives the new members. You can identify a group by its distinguished name (DN), GUID, security identifier (SID) or Security Accounts Manager (SAM) account name.
    You can also specify group object variable, such as $<localGroupObject>, or pass a group object through the pipeline to the Identity parameter. For example, you can use the Get-ADGroup cmdlet to get a group object and then pass the
    object through the pipeline to the Add-ADGroupMember cmdlet.

    The Members parameter specifies the new members to add to a group. You can identify a new member by its distinguished name (DN), GUID, security identifier (SID) or SAM account name. You can also specify user, computer, and group
    object variables, such as $<localUserObject>. If you are specifying more than one new member, use a comma-separated list. You cannot pass user, computer, or group objects through the pipeline to this cmdlet. To add user, computer,
    or group objects to a group by using the pipeline, use the Add-ADPrincipalGroupMembership cmdlet.
#>

Der vorletzte Satz macht uns leider Probleme. „You cannot pass user, computer, or group objects through the pipeline to this cmdlet.“ Das bedeutet, wir müssen uns einen anderen Befehl suchen. Aber zum Glück wird uns der Befehl auch direkt im letzten Satz verraten. „To add user, computer, or group objects to a group by using the pipeline, use the Add-ADPrincipalGroupMembership cmdlet.“

Super! Also schauen wir uns davon mal die Hilfe an:

Get-Help Add-ADPrincipalGroupMembership
<#
SYNTAX
    Add-ADPrincipalGroupMembership [-Identity] <ADPrincipal> [-MemberOf] <ADGroup[]> [-AuthType {Negotiate | Basic}] [-Credential <PSCredential>] [-Partition <String>] [-PassThru] [-Server <String>] [-Confirm] [-WhatIf]
    [<CommonParameters>]
#>

Jetzt kennen wir die Syntax und können User aufnehmen:

Get-ADUser -Filter {Department -eq "IT"} | Add-ADPrincipalGroupMembership -MemberOf "IT-Mitarbeiter"

Und schwupps, sind alle IT-Mitarbeiter Mitglied der Gruppe 🙂 Kontrollieren können wir das natürlich nochmal mit der Abfrage vom Anfang. Hier sollten jetzt alle User zu sehen sein.

Alle Gruppenmitglieder in eine weitere Gruppe aufnehmen

Nehmen wir an, Mitglieder von GruppeA müssen alle auch Mitglied von GruppeB werden. Auch das können wir ganz bequem mit den uns bekannten Befehlen machen:

Get-ADGroupmember "GruppeA" | Add-ADPrincipalGroupMembership "GruppeB"
#Die Ausgebe von allen Mitgliedern von GruppeA wird an den Befehl "Add-ADPrincipalGroupMembership GruppeB" übergeben

Das ging sehr schnell! Was aber wenn wir Mitglieder von einer Gruppe in mehrere Gruppen aufnehmen wollen? Muss ich den Befehl jetzt viele Male ausführen? Schauen wir uns dazu nochmal die Hilfe des Befehls an:

Get-Help Add-ADPrincipalGroupMembership

<#
BESCHREIBUNG
    The Add-ADPrincipalGroupMembership cmdlet adds a user, group, service account, or computer as a new member to one or more Active Directory groups.
#>

Super, also kann ich meinen Befehl einfach mit mehreren Gruppen angeben! So kann ich mit einem Befehl alle Mitglieder einer Gruppe in beliebig viele andere Gruppen aufnehmen.

Get-ADGroupmember "GruppeA" | Add-ADPrincipalGroupMembership "GruppeB","GruppeC","GruppeD"
# Die Mitglieder von GruppeA werden Mitglied in GruppeB, GruppeC und GruppeD

Viele AD-Objekte auf einmal bearbeiten

Im nächsten Schritt fällt uns auf, dass bei keinem User das Attribut „City“ gesetzt ist. In diesem Attribut sollte aber eigentlich die Stadt des Benutzers eingetragen sein. Deshalb entscheiden wir uns dazu, das Attribut bei allen Usern zu setzen. Über den Get-Command Befehl habe ich nach *ADUser* gesucht und den Befehl „Set-ADUser“ gefunden:

Get-ADUser -Filter * | Set-ADUser -City "Bitburg"
#Durch -Filter * werden alle User abgerufen und werden per Pipe an den Befehl "Set-ADUser" weitergegeben

Seit der Powershell in Windows 10/Server 2016 gibt es auch die Möglichkeit die Schalter des Befehls anzuzeigen. Dazu schreibst du den Befehl den du benutzen möchtest und ein „-“ und drückst anschließend STRG+LEERTASTE. Daraufhin werden dir alle möglichen Schalter angezeigt. Durch die verschiedenen Möglichkeiten kannst du dann einfach mit der TAB-Taste scrollen:

Auf diesem Weg musst du dir oft nicht erst die komplette Hilfe eines Befehls anzeigen lassen um die nötige Einstellung zu finden.

Schreibe einen Kommentar