System-Administration mit Microsofts PowerShell Teil 9
Zugriff auf das Active Directory über ADSI
![]() |
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.
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://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:
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 SearchNetworking, wie mit der PowerShell auf XML-Daten zugegriffen werden kann.
Microsoft Deutschland GmbH
Firmenprofil
Kontakt
Quest Software GmbH
Firmenprofil
Kontakt
-
RE(5): Kein Ruhezustand mehr bei Vista???
posted am 11.03.2010 um 14:22 von Only_Cisco
-
Laufwerksbuchstabe für 2. Platte in Windows98 ändern?
posted am 11.03.2010 um 09:51 von Vince
-
RE(2): WPA-PSK + WPA2-PSK gleichzeitig einstellen?
posted am 11.03.2010 um 09:49 von WLAN-Meister
-
ZyWall 35 - Wrong product Model
posted am 09.03.2010 um 17:58 von nicht registrierter User
-
RE(2): 3GP-Videos in Windows Mediaplayer abspielen?
posted am 09.03.2010 um 15:12 von Fachwirt
Follow us!

















(nicht registrierter User)
Kommentar abschicken