Windows 2003 Shell Scripting

Scripting-Hilfe für ActiveDirectory

LDAP-Suchfilter

Ein möglicher Stolperstein für die Arbeit mit den ActiveDirectory-Kommandos ist die Definition von LDAP-Suchfiltern. Diese besitzen eine gewöhnungsbedürftige Syntax, weshalb wir eine kleine Einführung in das Thema auch der Beschreibung der AD-Kommandos voranstellen.

Ein LDAP-Suchfilter besteht aus einem oder mehreren Ausdrücken in der Form ( <attribut> <operator> <wert> ). Die runden Klammern müssen mit angegeben werden. Beispielsweise lautet der Standardsuchfilter für die Kommandos csvde und ldifde auf (objectClass=*), also die Suche nach allen Objekten.

Die Namen der Attribute sind die tatsächlichen Schemanamen, nicht die Beschriftungen aus den Admin-Tools. Aus diesem Grund müssen Sie die Namen der Attribute unter Umständen erst mit einem AD-Werkzeug wie adsiedit.msc aus den Support Tools nachschlagen.

Folgende Operatoren sind in einer LDAP-Abfrage möglich:

Tabelle: Relationale LDAP-Operatoren

=

beide Werte müssen übereinstimmen

~=

ungefähre Übereinstimmung

>=

größer gleich

<=

kleiner gleich

Nicht alle LDAP-Implementierungen stellen die ungefähre Übereinstimmung zur Verfügung (ideal zur Suche nach allen „Meiers“ mit „e“ oder „a“). Ein Ungleich kann nur durch die Kombination aus >= und <= oder durch eine logische Negation eines =-Ausdrucks gebildet werden. Zur Kombination von Ausdrücken können Sie logische Operatoren verwenden:

Tabelle: Logische LDAP-Operatoren

!

logisch nicht (wird für ungleich benötigt)

&

logisch UND

|

logisch ODER

Die Syntax für die Kombination von Ausdrücken ist eine sogenannte Präfix-Notation, das heißt, es wird zuerst der Operator angegeben, danach die Teilausdrücke, jeweils in runden Klammern. Der gesamte Filter wird ebenfalls wieder in runde Klammern eingeschlossen.

Möchten Sie (beispielsweise aus dem users-Container) nur alle Benutzerkonten exportieren, verwenden Sie folgenden Filter:

(&(objectClass=user)(objectCategory=person))

Die Kombination aus beiden Ausdrücken ist notwendig, da auch die Computerkonten einer Domain unter der Objektklasse user laufen ((natürlich reicht eigentlich auch (objectCategory = Person) allein aus, allerdings könnten wir dann nicht den Operator "&"-Operator demonstrieren.))

Möchten Sie nur alle Benutzer, deren Nachname mit einem „T“ beginnt, dann können Sie folgenden Suchfilter verwenden:

(&(objectCategory=Person)(sn=T*))

Schwieriger wird es bei Mehrfachkombinationen. Hier eine Abfrage, die alle Gruppen oder User sucht, die nach dem 01.06.2004 erzeugt wurden. Wie Sie erkennen, muss der ODER-Ausdruck separat geklammert werden.

(&(|(objectClass=group)(objectClass=user))(whenCreated>=20040601000000.0Z))

Achten Sie bei Abfragen mit Datumswerten darauf, diese in der korrekten Schreibweise anzugeben. Das Format lautet JJJJMMTT hhmmss.xZ, wobei x für die Sekundenbruchteile und das Z für „Zulu-Time“ (Weltzeit) steht.

(&(objectClass=group)(whenCreated>=20040601000000.0Z))

Vorsicht: Schreiben Sie das Z immer groß, ansonsten wird die Abfrage fehlschlagen. Ebenso dürfen in der gesamten Abfrage keine Leerzeichen vorkommen.