Mobile-Menu

System-Administration mit Microsofts PowerShell Teil 9 Zugriff auf das Active Directory über ADSI

Autor / Redakteur: Markus Widl / Dipl.-Ing. (FH) Andreas Donner

Im neunten Teil der PowerShell-Artikelserie zeigt IP-Insider, wie über die Schnittstelle ADSI auf das Active Directory zugegriffen werden kann. Dabei wird schnell deutlich, dass die PowerShell hier noch viel Entwicklungspotential hat.

Anbieter zum Thema

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.

AdsPath zum Zugriff auf Objekte

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.

LDAP://CN=meier,OU=HR,DC=domain,DC=dom

Wichtig ist dabei, „LDAP“ in Großbuchstaben zu schreiben, da sonst der Zugriff fehlschlägt.

Anlegen von Objekten im Active Directory

Das grundsätzliche Vorgehen beim Anlegen von Objekten im Active Directory besteht aus folgenden vier Schritten:

  • Herstellen einer Verbindung zu dem Container (beispielswiese der Domäne oder einer Organisationseinheit), in dem das neue Objekt angelegt werden soll. Dazu wird das entsprechende Objekt geladen.
  • Vom Container-Objekt wird die Methode „Create“ aufgerufen. Als Parameter werden der Typ des gewünschten Objekts (z.B. „user“ für ein Benutzerkonto und „organizationalUnit“ für eine Organisationseinheit) sowie der Name angegeben. Create liefert das entsprechende Objekt zurück.
  • Die Objekteigenschaften werden bestimmt. Wichtig ist dabei, mindestens die erforderlichen Eigenschaften anzugeben, etwa den Anmeldenamen bei einem Benutzerkonto. Dazu werden unterschiedliche Schritte vorgenommen. Darunter sind die Methoden Put, für Einwert-Eigenschaften, und PutEx für Eigenschaften, die mehrere Werte gleichzeitig speichern können. Allerdings werden nicht alle Eigenschaften über Put und PutEx beschrieben. Hier hilft ein Blick in die Dokumentation des Active Directorys (Link am Ende des Artikels).
  • Nachdem die Eigenschaften belegt wurden, muss die Methode „SetInfo“ des neuen Objekts aufgerufen werden, damit das Objekt auch angelegt wird. SetInfo ist bei einer Fehlerbehandlung auch der kritische Befehl, da erst hier beim Anlegen ein Fehler auftreten würde, etwa weil das neue Benutzerkonto bereits existiert oder das angegebene Passwort nicht den Kennwortrichtlinien entspricht.

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.

$dom = [ADSI]“LDAP://dc=domain,dc=dom“$ou = $dom.Create(„organizationalUnit“, „ou=HR“)$ou.SetInfo()

Das Anlegen eines Benutzerkontos ist dabei schon deutlich aufwändiger:

$ou = [ADSI]“LDAP://ou=HR,dc=domain,dc=dom“$user = $ou.Create(„user“, „cn=Meier“)$user.Put(„sAMAccountName“, „meier“)$user.SetInfo()$user.PSBase.InvokeSet(„AccountDisabled“, $false)$user.Setinfo()

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.

Objekteigenschaften auslesen

Das Auslesen von Objekteigenschaften gestaltet sich dabei deutlich einfacher. Im Beispiel wird die Eigenschaft „whenCreated“ des oben angelegten Benutzerkontos ausgegeben.

$user = [ADSI]“LDAP://cn=meier,ou=HR,dc=domain,dc=dom“$user.Get(„WhenCreated“)

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.

Active Directory-Objekte löschen

Zum Löschen eines vorhandenen Objekts aus dem Active Directory wird die Methode „Delete“ des jeweiligen Containers aufgerufen. Ein SetInfo ist nicht erforderlich.

$ou = [ADSI]“LDAP//ou=HR,dc=domain,dc=de“$ou.Delete(„user“,“cn=meier“)

Alle Objekte eines Containers bearbeiten

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.

Fazit

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:

Jetzt Newsletter abonnieren

Täglich die wichtigsten Infos zu Netzwerktechnik, IP-Kommunikation und UCC

Mit Klick auf „Newsletter abonnieren“ erkläre ich mich mit der Verarbeitung und Nutzung meiner Daten gemäß Einwilligungserklärung (bitte aufklappen für Details) einverstanden und akzeptiere die Nutzungsbedingungen. Weitere Informationen finde ich in unserer Datenschutzerklärung.

Aufklappen für Details zu Ihrer Einwilligung

new-QADUser -name ‚Meier‘ -ParentContainer ‚OU=HR,DC=domain,DC=dom‘ -SamAccountName ‚meier‘ -UserPassword ‚P@ssword‘

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 IP-Insider, wie mit der PowerShell auf XML-Daten zugegriffen werden kann.

Artikelfiles und Artikellinks

(ID:2004720)