14.05.2007 | Autor / Redakteur: Markus Widl / Andreas Donner
Im neunten Teil der PowerShell-Artikelserie zeigt SearchNetworking, wie über die Schnittstelle ADSI auf das Active Directory zugegriffen werden kann. Dabei wird schnell deutlich, dass die PowerShell hier noch viel Entwicklungspotential hat.
Zum Zugriff auf das Active Directory sieht Microsoft die objektbasierte Schnittstelle ADSI (Active Directory Service Interface) vor. Auch mit der PowerShell können mit ihrer Hilfe Verwaltungsaufgaben im Active Directory durchgeführt werden. Dazu zählen unter Anderem das Anlegen und Löschen von Objekten sowie das Lesen und Ändern von Objekt-Eigenschaften gleichermaßen.
Der Artikel zeigt exemplarisch Beispiele zum Anlegen einer Organisationseinheit und eines Benutzerkontos. Von diesem Konto werden dann Eigenschaften ausgegeben. Abschließend wird das Konto wieder gelöscht.
Die im Active Directory enthaltenen Objekte werden über den sogenannten AdsPath adressiert. Diese Pfadangabe besteht zum einen aus dem Provider, der im vorliegenden Fall immer LDAP (Lightweight Directory Access Protocoll) ist, sowie des Pfades in Domainschreibweise, wie er auch von anderen Anwendungen mit Active Directory-Unterstützung bekannt ist. Beispielsweise zeigt folgender Pfad auf ein Benutzerkonto mit dem Common Name „meier“, wobei das Konto in der Organisationseinheit „HR“ auf oberster Ebene der Domäne „domain.dom“ liegt.
Wichtig ist dabei, „LDAP“ in Großbuchstaben zu schreiben, da sonst der Zugriff fehlschlägt.
Das grundsätzliche Vorgehen beim Anlegen von Objekten im Active Directory besteht aus folgenden vier Schritten:
Im folgenden Beispiel wird eine Organisationseinheit angelegt. Bis auf Schritt 3 ist dort das Vorgehen zu erkennen. Der 3. Schritt ist hier nicht erforderlich, da keine weiteren Eigenschaften benötigt werden.
Das Anlegen eines Benutzerkontos ist dabei schon deutlich aufwändiger:
Nach dem Create wird die Eigenschaft „sAMAccountName“ gesetzt. Dabei handelt es sich um den Anmeldenamen. Die Bezeichnungen der Eigenschaften finden sich natürlich auch in der Dokumentation. Wichtig ist der SetInfo-Aufruf vor der weiteren Belegung der Eigenschaften, da dies erst funktioniert, wenn das Konto bereits existiert. Eine wichtige Eigenschaft ist etwa „Account Disabled“. Diese steht nach dem Anlegen des Kontos auf True, womit das Konto zwar angelegt, aber deaktiviert ist. Diese Eigenschaft muss auf False gesetzt werden. Dabei ist AccountDisabled jedoch eine der Eigenschaften, die nicht über Put oder PutEx beschrieben werden kann. Hier hilft die Proxy-Klasse PSBase der PowerShell, die manche Active Directory-Eigenschaften kapselt.
Das Auslesen von Objekteigenschaften gestaltet sich dabei deutlich einfacher. Im Beispiel wird die Eigenschaft „whenCreated“ des oben angelegten Benutzerkontos ausgegeben.
Zum Ermitteln der Eigenschaftswerte wird Get, GetEx und InvokeGet der Proxy-Klasse PSBase verwendet.
Optionale Eigenschaften, die nicht belegt wurden, liefern keine leere Zeichenkette, sondern es tritt ein Fehler auf. Dieses Verhalten ist in einer eventuell vorhandenen Fehlerbehandlung zu berücksichtigen.
Zum Löschen eines vorhandenen Objekts aus dem Active Directory wird die Methode „Delete“ des jeweiligen Containers aufgerufen. Ein SetInfo ist nicht erforderlich.
Sollen alle Objekte eines Containers bearbeitet werden, kann über die schon mehrfach angesprochene Proxyklasse eine Sammlung der in einem Container enthaltenen Objekte angefordert werden. Dazu wird die Eigenschaft „Children“ angesprochen. Diese Sammlung kann anschließend über die Pipeline der PowerShell behandelt werden.
Der Zugriff auf Active Directory-Objekte ist in der aktuellen Version der PowerShell nicht besonders gut gelungen. Wünschenswert wären PowerShell-Cmdlets, mit denen die Arbeit deutlich weniger komplex wäre.
Wie es besser geht, zeigt etwa die Firma Quest Software. Sie stellt die PowerShell-Erweiterung „Managed Shell for Active Directory“ bereit (derzeit noch im Beta-Stadium), die beispielsweise die Cmdlets Get-/Set-/New-QADUser und Get-/Set-/New-QADObject enthält. Das Anlegen eines Benutzerkontos sieht damit beispielsweise wie folgt aus:
Es ist zu hoffen, dass es mit der nächsten Version der PowerShell ebenso einfach möglich sein wird, die Objekte des Active Directorys zu verwalten.
Im nächsten Teil der PowerShell-Artikelserie zeigt SearchNetworking, wie mit der PowerShell auf XML-Daten zugegriffen werden kann.
Dieser Beitrag ist urheberrechtlich geschützt. Sie wollen ihn für Ihre Zwecke verwenden? Infos finden Sie unter www.mycontentfactory.de (ID: 2004720)