Fiese Falle bei AD Attributen mit Bindestrich 16. Oktober 2012

Das Arbeiten mit dem Active Directory der Powershell ab Windows Server 2008 R2 ist eine feine Sache. Gerade Massenänderungen an Active Directory Objekten sind damit relativ einfach zu realisieren. Möchte man zum Beispiel einem Benutzer der Domäne ein Homeverzeichnis verpassen, dann könnte man das in einem Einzeiler so realisieren:

set-aduser Administrator -homedirectory "\\srv1\homes\Administrator"

Wesentlich schwieriger wird es, wenn man Attribute manipulieren will, die das cmdlet set-aduser nicht als Parameter kennt. Dann muss man entweder auf den Parameter -add zurückgreifen oder man geht den weg über das Active Directory Objekt selber und weist der Objekteigenschaft den Wert selbst zu. Nehmen wir einmal an, wir wollen unserem Administrator sein Homeverzeichnis auch als FTP Root zur Verfügung stellen. Das kann man recht einfach über die FTP Isolation realisieren (FTP Isolation).
Wenn man jetzt allen Benutzern das Homeverzeichnis als FTP-Root Verzeichnis zur Verfügung stellen möchte, dann artet das recht schnell in einer Klickorgie aus, da bei jedem User das Attribut msIIS-FTPRoot gefüllt werden. Deshalb muss hier die Powershell helfen. Schauen wir uns als Erstes einmal den Weg über den Parameter -add an:

set-aduser Administrator -add @{msIIS-FTPRoot='\\srv1\homes\administrator'}

Dieses Kommando wird nicht funktionieren. Die Powershell interpretiert den “-” und meckert, das die Hash-Table nicht komplett ist.

powershell

Man muss also die Powershell zwingen, diesen Bindestrich nicht auszuwerten. Deshalb setzt man das Hashliteral einfach in einfache Anführungszeichen:

powershell

Man könnte aber auch über die Powershell mit get-aduser sich als Erstes das Active Directory Objekt holen und in eine Variable schreiben und dann direkt den Wert über die Objekteigenschaft zuweisen. Auch hier stolpert die Powershell über den Bindestrich:

powershell

Auch bei dieser Methode muss man also aufpassen, wenn man Attribute mit einem Bindestrich manipulieren möchte:

powershell

Gerade wenn man Skripte schreibt, die mehrere AD-Attribute verändern dann ist dies ein Fehler in den man leicht reintappen kann. Deshalb immer aufpassen ob Bindestriche in den Attributen vorhanden sind.

Leave a Reply

*