Active Directory in PowerShell als Laufwerk mounten und Objekte bearbeiten

    Active Directory StrukturPowerShell kann nicht nur Dateisysteme als Lauf­werk ansprechen, sondern auch die Registry, die Umgebung, den Zertifikatsspeicher oder eben das AD. Daher kann man diese hierarchi­schen Strukturen mit den gleichen Befehlen navi­gieren und bearbeiten wie Verzeichnis­bä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.

    Im Wurzelverzeichnis der AD-Struktur kann man mit gci die vorhandenen Domänen anzeigen.

    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 Schreib­operationen 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.

    Keine Kommentare