Active Directory-Scripting

Der abschließende Teil der Serie beschäftigt sich noch näher mit den Internas des Active Directory. Es geht um die Konfigurationseinstellungen des Active Directory selbst sowie um die Durchführung von Wartungsaufgaben über die Schnittstellen, die von ADSI bereitgestellt werden.

Die meisten Konfigurationsinformationen für den Verzeichnisdienst werden im Active Directory abgelegt. Einige Konfigurationsinformationen für das Active Directory stehen jedoch auch in der Registry.

Der Grundansatz

In den vorangegangenen Teilen der Serie wurde – primär am Beispiel von Benutzer- und Gruppeninformationen – gezeigt, wie man auf definierte Objekte im Active Directory zugreifen und die Attributwerte bearbeiten kann.

Das ist auch die Grundlage für weitere Skripts. Dazu muss man nur wissen, welches Attribut von welchem Objekt modifiziert werden muss. Im Gegensatz zur Bearbeitung von Konten für Benutzer, Gruppen und Computer ist das oftmals sogar noch einfacher, da sich die relevanten Objekte im Container Configuration und immer an einer genau festgelegten Position befinden.

Komplexere Herausforderungen wie die Aufzählung vorhandener organisatorischer Einheiten und das Suchen nach bestimmten Objekten entfallen also.

ADSI Edit kann ein hilfreiches Werkzeug bei der Erstellung solcher Skripts sein. Einer der Konfigurationsparameter, die immer wieder angepasst werden müssen, ist tombstoneLifetime. Er findet sich in

cn=directory service,cn=windows
nt,cn=services,cn=configuration,dc=windowstestnetz,dc
=intra

Die beiden Werte für dc müssen natürlich angepasst werden. Mit Hilfe von ADSI Edit kann man einfach durch die Strukturen des Active Directories navigieren und die anzupassenden Objekte und Attribute ermitteln.

Nun muss nur noch auf das Objekt zugegriffen werden. Dazu kann mit GetObject gearbeitet werden:

Set objConf = GetObject("LDAP:// cn=directory service,
cn=windows
nt,cn=services,cn=configuration,dc=windowstestnetz,dc
=intra ")

Nun muss nur noch der Attributwert angepasst und mit der Methode SetInfo gesetzt werden. Die Vorgehensweise unterscheidet sich in nichts von der Modifikation beispielsweise von Attributen eines Benutzers. Ebenso können so auch einfach die Konfigurationseinstellungen ausgelesen werden. Die Voraussetzung ist natürlich immer, dass man weiß, was wo im Active Directory konfiguriert wird – und das ist in den meisten Fällen die deutlich größere Hürde.

Die Verbindungen des Active Directory

In manchen Fällen werden in diesem Zusammenhang aber etwas komplexere Skripts benötigt. Ein Beispiel dafür findet sich in Listing 1 mit der Ermittlung der Verbindungen im Active Directory für einen ausgewählten Domänencontroller.

Listing 1: Das Ermitteln der Verbindungen im Active Directory
(Quelle: Microsoft)
strDcRDN = "cn=server1"
strSiteRDN = "cn=Stuttgart"
Set objRootDSE = GetObject("LDAP://RootDSE")
strConfigurationNC = objRootDSE.Get("configurationNamingContext")
strNtdsSettingsPath = "LDAP://cn=NTDS Settings," & strDcRDN & ",cn=Servers,"
& strSiteRDN & ",cn=Sites," & strConfigurationNC
Set objNtdsSettings = GetObject(strNtdsSettingsPath)
objNtdsSettings.Filter = Array("nTDSConnection")
WScript.Echo strDcRDN & " NTDS Connection Objects" & vbCrLf &
String(Len(strDcRDN) + 24, "=")
For Each objConnection In objNtdsSettings
WScript.Echo "Name: " & objConnection.Name
WScript.Echo "Enabled: " & objConnection.enabledConnection
WScript.Echo "From: " & Split(objConnection.fromServer, ",")(1)
WScript.Echo "Options: " & objConnection.Options
WScript.Echo "Transport: " & Split(objConnection.transportType, ",")(0)
WScript.Echo "Naming Contexts"
WScript.Echo "---------------"
For Each objDNWithBin In objConnection.GetEx("ms-DS-ReplicatesNCReason")
Wscript.Echo objDNWithBin.DNString
Next
WScript.Echo
Next

In diesem Fall werden zunächst die Namen eines Servers und eines Standorts konfiguriert. Anschließend wird über die Informationen von RootDSE, also der Root der LDAP-Repräsentation der Informationen im Active Directory, der Namenskontext für die Konfigurationsinformationen ermittelt. Das entspricht der Information

cn=configuration, dc=windowstestnetz,
dc=intra

aus dem ersten Beispiel in diesem Artikel. Der Vorteil der im Listing 1 gewählten Vorgehensweise ist die leichtere Nutzung des Skripts in anderen Domänen.

Anschließend wird erst der relativ komplexe Pfad zu dem Objekt erstellt, bevor auf das Objekt selbst zugegriffen wird. Für dieses werden nun nur die Objekte der Klasse nTDSconnection ermittelt. Für die verschiedenen konfigurierten Verbindungsobjekte werden anschließend verschiedene Attribute ausgegeben.

Bild 1: Mit ADSI Edit lässt sich einfach verifizieren, wie genau die anzupassenden Objekte und Attribute heißen.
Bild 1: Mit ADSI Edit lässt sich einfach verifizieren, wie genau die anzupassenden Objekte und Attribute heißen.

Das Skript wirkt durch die Ausgabe einer größeren Anzahl von Parametern und durch die relativ komplexe, aber flexible Vorgehensweise für die Konstruktion des Objektnamens deutlich aufwändiger als es tatsächlich ist. Letztlich handelt es sich auch hier nur um eine Aufzählung von Objekten einer definierten Klasse in einem bestimmten Bereich des Active Directory, was sich von der Auflistung von Benutzern oder Gruppen nur graduell unterscheidet.