Active Directory-Scripting

Mehrwertige Attribute

Der Umgang mit mehrwertigen Attributen, wie sie sowohl bei Benutzern als auch Gruppen häufig zu finden sind, wurde im dritten Teil der Serie bereits angerissen. Nachfolgend werden die wichtigsten Schritte dabei näher vorgestellt.

Die einfachste Form der Nutzung ist das Ändern oder Setzen solcher Attribute. Das kann beispielsweise mit den folgenden Zeilen erreicht werden:

Const ADS_PROPERTY_UPDATE = 2
Set objGroup = GetObject ("LDAP://cn=Atl-
Users,ou=HR,dc=NA,dc=fabrikam,dc=com")
objGroup.PutEx ADS_PROPERTY_UPDATE, "member", Array("
cn=MartinK,ou=Beratung,dc=Stuttgart,dc=kuppinger,
dc=com",
"cn=MarionU,ou=Beratung,dc=Stuttgart,dc=kuppinger,dc=
com")
objGroup.SetInfo

In diesem Fall wird eine Aktualisierung des Attributs member vorgenommen, wobei ein Array mit zwei Werten übergeben wird. Die bisherigen Werte werden überschrieben.

Um die Werte nicht zu überschreiben, sondern beizubehalten, bietet sich dagegen folgende Variante an:

Const ADS_PROPERTY_APPEND = 3
Set objGroup = GetObject ("LDAP://cn=Atl-
Users,ou=HR,dc=NA,dc=fabrikam,dc=com")
objGroup.PutEx ADS_PROPERTY_APPEND, "member", Array("
cn=TimK,ou=Beratung,dc=Stuttgart,dc=kuppinger,dc
=com")
objGroup.SetInfo

Der einzige Unterschied ist, dass mit einem anderen Wert für die Konstante gearbeitet wird. Bei mehrwertigen Attributen wird die Methode PutEx eingesetzt, für die unterschiedliche Parameter angegeben werden können. Diese Parameter steuern, ob die Werte im Array aktualisiert oder erweitert werden.

Außerdem gibt es auch einen Parameter zum Löschen der Informationen in dem mehrwertigen Attribut. Das Beispiel findet sich nachstehend:

Const ADS_PROPERTY_DELETE = 4
Set objGroup = GetObject ("LDAP://cn=Finanzen,OU=Beratung,
dc=Stuttgart,dc=Kuppinger,dc=com")
objGroup.PutEx ADS_PROPERTY_DELETE, "member", Array("
cn=MartinK,ou=Beratung,dc=Stuttgart,dc=Kuppinger,
dc=com")
objGroup.SetInfo

Daran wird deutlich, wie einfach der Umgang mit solchen Attributen ist. Wenn man ein Konstrukt kennt, kann man fast alle Operationen durch Modifikation einer Konstante, die man auch jeweils gleich bezeichnen könnte, vornehmen.

Die einzige Ausnahme ist das Lesen der Einträge. Dazu wird der folgende Code verwendet:

Set objGroup = GetObject ("LDAP://cn=Finanzen,ou=Beratung,
dc=Stuttgart,dc=Kuppinger,dc=com")
For Each Member in objGroup.GetEx("member")
Wscript.Echo Member
Next

Der gleiche Ansatz wurde bereits weiter oben in diesem Artikel im Zusammenhang mit der Enumeration von Gruppenmitgliedschaften vorgestellt.

Wie geht es weiter?

Der vierte Teil der Serie wird sich noch mehr den Interna des Active Directory widmen. Es wird dort nicht mehr um das Verwalten der gängigen Benutzerobjekte gehen, sondern um die Konfigurationseinstellungen des Active Directory selbst sowie um die Durchführung von Wartungsaufgaben über die Schnittstellen, die von ADSI bereitgestellt werden. Damit lassen sich viele Aufgaben vereinfachen, für die sonst beispielsweise mit ADSI Edit direkt auf die Detaileinstellungen im Active Directory zugegriffen werden müsste.

Listing 3: Das Anlegen von 1000 Benutzern (Quelle: Microsoft)
Const ADS_PROPERTY_APPEND = 3
Set objRootDSE = GetObject("LDAP://rootDSE")
Set objContainer = GetObject("LDAP://cn=Users," & _
objRootDSE.Get("defaultNamingContext"))
Set objGroup = objContainer.Create("Group", "cn=Grupp1")
objGroup.Put "sAMAccountName","Gruppe1"
objGroup.SetInfo
For i = 1 To 1000
strDN = ",cn=Users," & objRootDSE.defaultNamingContext
objGroup.PutEx ADS_PROPERTY_APPEND, "member", _
Array("cn=BenutzerNr" & i & strDN)
objGroup.SetInfo
Next
WScript.Echo "Gruppe1 erstellt und 1000 Users zu der Gruppe hinzugefügt."

Serienfortsetzung

Der folgende Teil der Serie „Kerberos-Interoperabilität“ wird in der Ausgabe 5/2006 von Expert’s inside Windows NT/2000 erscheinen.