Tags: Active Directory, PowerShell
Windows 8 und Server 2012 brachten eine Vielzahl neuer Cmdlets im Modul für Active Directory. Sie unterstützen somit fast jede administrative Aufgabe im Verzeichnisdienst von Microsoft, darunter auch die Verwaltung von Benutzerkonten. Die folgenden Beispiele funktionieren aber schon unter Windows 7 und Server 2008 R2.
Nachdem PowerShell sowohl ein interaktiver Kommandointerpreter als auch eine Script-Umgebung ist, kann man die AD-Cmdlets entweder in einzelnen Befehlen für kleinere Aufgaben einsetzen, oder sie nutzen, um Scripts für komplexere Probleme entwickeln. Für aufwändigere Operationen steht jedoch eine Vielzahl an Tools zur Verfügung, so dass man eher selten in die Verlegenheit kommen sollte, aufwändig programmieren zu müssen.
Neue User anlegen
Das gilt beispielsweise beim Anlegen neuer Benutzerkonten, das PowerShell mit Hilfe des Cmdlets New-ADUser und einem Rattenschwanz von Parametern bewerkstelligen kann. Wenn man nur einzelne User anlegt, dann lässt sich dies über grafische Tools einfacher erledigen. Bei einer größeren Zahl an Accounts unterstützt das kostenlose Z-Hire den Administrator durch Templates, die eine wiederholte Eingabe von bestimmten Daten vermeiden helfen.
Ähnlich ist die Lage beim Bulk-Import von Benutzern aus CSV- oder Excel-Dateien, wofür es ebenfalls mehrere, darunter auch kostenlose Tools gibt. Darüber hinaus existieren bereits zahlreiche mächtige AD-Scripts auf der PowerShell Script Gallery, die auch immer einen Blick wert ist, wenn man Scripts für andere Zwecke benötigt. Aus diesen Grund orientieren sich die folgenden Beispiele an 1-Zeilern, mit denen man auf der Kommandozeile ad hoc kleinere Aufgaben bewältigen kann.
Benutzerkonten filtern
Häufig möchte man nur Informationen über Benutzer aus dem AD auslesen. Aber auch wenn man sie ändern will, muss man in den meisten Fällen die gewünschten User erst ermitteln. Dafür ist das Cmdlet Get-ADUser zuständig, das mit Hilfe des Parameters -Filter das Ergebnis gleich an der Quelle auf die die benötigten Objekte einschränkt. Dies ist einem Vorgehen vorzuziehen, bei dem man alle User herunterlädt und dann lokal über eine Pipe durch ein Where-Objekt schickt:
Get-ADUser -Filter "Surname -like 'Ber*'"
In diesem Beispiel gibt der Befehl alle User zurück, deren Nachname mit der Zeichenkette "Ber" beginnt. Für Ausdrücke innerhalb des Filters kann man auch andere Vergleichsoperatoren verwenden, mit deren Hilfe man weitere Attribute wie etwa Name prüfen kann. Möchte man alle Konten abrufen, dann muss man den obligatorischen Parameter -Filter trotzdem verwenden, in diesem Fall mit dem Wert '*'.
Suche auf Domänen und OUs einschränken
Will man die Suche auf bestimmte OUs oder Domänen eingrenzen, dann steht dafür der Parameter -SearchBase zur Verfügung:
Get-ADUser -Filter "Surname -like 'Ber*'" -SearchBase "OU=IT,DC=contoso,DC=com"
Wie man an diesem Beispiel erkennen kann, erwartet -SearchBase die Übergabe eines Distinguished Name.
In der Praxis möchte man User-Objekte nicht immer nur nach Namen filtern, sondern häufig auch nach anderen Eigenschaften. Standardmäßig zeigt Get-ADUser aus Performance-Gründen jedoch nur wenige Attribute an. Das kann man mit dem Parameter -Properties ändern:
Get-ADUser -Filter "Surname -like 'Ber*'" -Properties *
Anhand der Ausgabe dieses Befehls lassen sich die Namen der verschiedenen Attribute eruieren, die man dann in Filter-Ausdrücken verwenden kann. Zum Beispiel könnte man alle Mitarbeiter, die der Niederlassung mit der Adresse "Rosenweg 1" zugeordnet sind, auf diese Weise ermitteln:
Get-ADUser -Filter "StreetAddress -eq 'Rosenweg 1'"
Abfragen mit Search-ADAccount
Für bestimmte Abfragen ist indes Search-ADAccount besser geeignet, weil es für eine Reihe von Eigenschaften spezifische Parameter akzeptiert. Das gilt etwa, wenn man wissen möchte, welche Benutzer sich ausgesperrt haben oder wessen Konto abgelaufen ist.
Um alle Benutzerkonten zu erfragen, deren Kennwort nie abläuft, würde man den Befehl
Search-ADAccount -PasswordNeverExpires -UsersOnly
eingeben. Auch hier lässt sich die Abfrage mit -SearchBase auf bestimmte Domänen oder OUs eingrenzen. Weitere Parameter zur Spezifizierung von Attributen mit Search-ADAccount sind unter anderem:
-AccountDisabled
-AccountExpiring <Datum>
-AccountInactive <Datum oder Zeitspanne> (z.B.: -AccountInactive 31 für 31 Tage)
-LockedOut
-PasswordExpired
Attribute von User-Objekten ändern
Oft ist das Abrufen von AD-Benutzer nach bestimmten Kriterien nur der erste Schritt, um anschließend ausgewählte Eigenschaften zu verändern. Letzteres lässt sich mit dem Cmdlet Set-ADUser erreichen:
Get-ADUser -Filter * -SearchBase "OU=Marketing,DC=contoso,DC=com" | Set-ADUser -Manager PHuber
Mit diesem Befehl kann man den Vorgesetzten aller User in der OU Marketing eintragen, wenn die entsprechende Abteilung einen neuen Leiter bekommen hat. Das Cmdlet akzeptiert eine Reihe von Schaltern, mit denen man jeweils einzelne Attribute mit einem neuen Wert versehen kann, im obigen Beispiel wäre das -Manager.
Möchte man Konten mit bestimmten vorhandenen Attributwerten ändern, dann kann man in einem Kommando Get-ADUser und Set-ADUser kombinieren:
Get-ADUser -Filter "StreetAddress -eq 'Marsstr. 3'"|Set-ADUser -StreetAddress "Rosenweg 1"
In diesem Aufruf würde man die Anschrift in allen betroffenen Benutzerkonten ändern, wenn eine Niederlassung in eine andere Straße umgezogen ist. Eine Liste aller von Set-ADUser unterstützten Parameter enthält dieser TechNet-Artikel.
Täglich Know-how für IT-Pros mit unserem Newsletter
Verwandte Beiträge
- Security- und Health-Checks für Active Directory mit PowerShell-Scripts
- 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