Tags: Active Directory, PowerShell
PowerShell kann nicht nur Dateisysteme als Laufwerk ansprechen, sondern auch die Registry, die Umgebung, den Zertifikatsspeicher oder eben das AD. Daher kann man diese hierarchischen Strukturen mit den gleichen Befehlen navigieren und bearbeiten wie Verzeichnisbäume.
Windows 8.x und Server 2012 (R2) erweiterten den Befehlsumfang von PowerShell erheblich, so dass eigene Cmdlets für eine Vielzahl von Aufgaben im AD-Management bereitstehen. Das Spektrum reicht von der Verwaltung der Benutzer und Passwörter über die Bearbeitung von Zugriffsrechten bis zum Management von Group Policies.
Zahlreiche Cmdlets für das AD-Management
Der Preis für diese Leistungsfähigkeit ist eine nicht unerhebliche Komplexität, weil man über die zuständigen Cmdlets und deren Syntax Bescheid wissen muss. Dies macht sich vor allem bei der interaktiven Nutzung der PowerShell bemerkbar, wenn man ständig nach den korrekten Befehlen recherchieren muss.
Das Mounten von Registry oder AD als Laufwerk hat den großen Vorteil, dass man dann die gleichen Cmdlets anwenden kann, die man von verschiedenen Dateioperationen her kennt. Im Fall des Active Directory gilt es jedoch einige syntaktische Besonderheiten bei der Navigation durch die Baumstruktur zu berücksichtigen.
AD: Drive mounten
Ehe man mit dem Befehl Set-Location (Alias cd) ins Active Directory wechselt, sollte man überprüfen, ob es überhaupt als Laufwerk zur Verfügung steht. Dies kann man mit dem Befehl Get-PSDrive tun, das man mit dem Parameter -PSProvider ActiveDirectory auf AD-Drives einschränken kann. Standardmäßig ist es nicht gemountet, so dass man dies durch Laden des AD-Modules nachholen muss:
Import-Module ActiveDirectory
Nun sollte man mit dem Befehl
cd ad:
ins Wurzelverzeichnis des AD wechseln können. Neben Set-Location (Alias sl, ls oder cd) stehen für die Navigation im AD-Baum auch Get-Location, push und pop zur Verfügung. Innerhalb eines Teilbaums kann man sich wie gewohnt durch Eingabe von Get-ChildItem (Alias gci, dir) einen Überblick über die darin enthaltenen Objekte verschaffen. Dazu zählen im Root des AD die im Forest enthaltenen Domänen.
In eine Domäne oder OU wechseln
Möchte man etwa mit cd contoso oder cd contoso.com dorthin wechseln, dann erhält man eine Fehlermeldung. Notwendig ist nämlich hier die Angabe des Distinguished Name, also im obigen Beispiel
cd "DC=contoso,DC=com"
Das Gleiche gilt anschließend auch für OUs, Gruppen oder Container. Um etwa in die OU namens Sales zu wechseln, dann gibt man je nach aktueller Position
cd OU=sales
oder auch
cd ../OU=sales
ein, und für den Container Computers
cd CN=Computers
Wie im Verzeichnissystem unterstützt PowerShell auch beim AD-Laufwerk die Autovervollständigung von Objektnamen mittels Tab-Taste, wobei diese erst nach Eingabe des Gleichheitszeichens im Distinguished Name aktiv ist. Außerdem lassen sich bei langen Namen auch Wildcards verwenden.
Objekte auflisten und filtern
Innerhalb von OUs oder Gruppen kann man mit dem erwähnten Get-ChildItem sehr einfach Benutzer oder Computer auflisten. Ohne Parameter zeigt das Cmdlet erwartungsgemäß alle Objekte im betreffenden Container an, bei Verwendung des Schalters -Recurse auch in allen Unterverzeichnissen. Wenn man sie anhand des Namens eingrenzen möchte, dann filtert man das Ergebnis durch ein Where-Objekt:
gci | where {$_.Name -like "F*"}
Standardmäßig zeigt gci für User-Objekte 3 Attribute an. Möchte man mehr oder andere Eigenschaften darstellen, dann nutzt man dafür den Parameter -Properties. Übergibt man hier als Wert einen '*', dann erhält man sämtliche Attribute, die man bei Bedarf mit Hilfe von select filtern kann:
gci -properties * | where ObjectClass -eq "user" | select displayname, name, mail, telephoneNumber
Tabellarische Daten auf der GUI ausgeben
Nachdem die Anzeige einer größeren Zahl von User-Objekten mit mehr als den 3 vorgegebenen Attributen sehr unübersichtlich werden kann, empfiehlt sich hier der Einsatz von Out-GridView. Dieses Cmdlet zeigt die Ausgabe von gci in einer grafischen Tabelle mit sortierbaren Spalten an, so dass man bequem durch die Liste scrollen kann:
gci -properties * | where ObjectClass -eq "user" | select displayname, name, mail, telephoneNumber | Out-GridView
Objekte löschen oder kopieren
Die bisherigen Beispiele beschränken sich auf den lesenden AD-Zugriff. Das PowerShell-Laufwerk lässt aber auch Schreiboperationen zu. So kann man relativ einfach User-Objekte mit Hilfe von Remove-Item löschen oder mit Copy-Item duplizieren:
Remove-Item ".\CN=FLee"
Es versteht sich von selbst, dass bei derartigen Aktionen größte Vorsicht geboten ist, weil man damit unversehens ganze Teilbäume vernichten kann.
Neue User anlegen
Auch das Erstellen neuer Objekte ist möglich ist, zum Beispiel legt dieser Befehl einen neuen User mit dem Namen Michael Mustermann in der OU Marketing an:
New-Item -ItemType user -path "OU=Marketing" -name "CN=Michael Mustermann"
Analog dazu kann man auch eine OU erstellen, wenn man für -ItemType den Wert OU angibt.
Attribute von Objekten ändern
Eine häufige Anwendung des AD-Laufwerks wird darin bestehen, Attribute von bestehenden Objekten zu ändern. So würde folgender Aufruf
Set-ItemProperty -Filter "Company=Contoso" -Name Company -Value Nordwind -Path *
das Attribut Company bei allen Objekten mit dem Wert Contoso auf Nordwind ändern. In diesem Beispiel würde sich die Operation auf die User der OU oder Gruppe beschränken, in der man sich gerade befindet. Alternativ kann man natürlich über den Parameter -Path einen Pfad angeben auf den sich die Aktion auswirken soll.
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