Dass sich mit Active Directory recht einfach Suchen im Verzeichnis erstellen lassen, ist vielen Administratoren bekannt. Durch die Suchsyntax, die sich mindestens aus einem Attribut, einem Operator und einem Referenzwert zusammensetzt, lassen sich viele Abfragen und Reports generieren.

Eine in den technischen Communities immer wiederkehrende Frage scheint aber nicht ganz enfach zu lösen zu sein: „Wie kann ich Objekte suchen, die in einer bestimmten Organisationseinheit (OU) stecken?“ Oder etwas genereller formuliert: Wie lassen sich Objekte anhand ihres Speicherorts finden?

Ein guter Kandidat für die Suche nach dem Speicherort muss das Attribut distinguishedName (DN) sein – dieses Attribut speichert schließlich den LDAP-Pfad von Objekten im Verzeichnis. Ein Benutzer namens „Tom“ in der OU „Marketing“ der Domäne „contoso.com“ würde durch den DN „CN=Tom Sawyer,OU=Marketing,DC=contoso,DC=com“ beschrieben werden. „Ideal“, sollte man glauben. Eine Filtersuche nach (distinguishedName=*,OU=Marketing,DC=contoso,DC=com) mit LDP zeigt keine Ergebnisse.

Komisch, denn in der OU befinden sich entsprechende Benutzer:

Auch die Suche nach (dn=*,OU=Marketing,DC=contoso,DC=com) bleibt erfolglos. Wie kann das sein?

Die Erklärung hierzu ist recht einfach: „distinguishedName“ ist kein normales Attribut wie etwa „givenName“, das Vornamen speichert. DistinguishedName ist ein berechnetes („constructed“) Attribut. Es wird nicht, wie andere Attribute, zusammen mit dem Objekt in der Datenbank gespeichert und ist damit jederzeit abrufbar. Stattdessen wird es während des Objektaufrufes, sozusagen „on-the-fly“ berechnet und ausgegeben – es existiert demnach nicht in der Datenbank, woraus folgt, dass LDAP-Suchen nicht darauf angewendet werden können. Mehr hierzu auf MSDN: http://msdn.microsoft.com/de-de/library/cc223167(PROT.13).aspx

Will man seine Suche auf Objekte bestimmter Container oder Organisationseinheiten einschränken, dann geht das mit einer Standard-LDAP-Funktion, nämlich der Angabe des Start-Suchzweiges der LDAP-Suche, auch „Basis-DN“ oder „Base-DN“ genannt:

Andere Anwendungen bieten Schalter zur Konfiguration an. In DSQuery wird der Basis-DN ohne Schalter angegeben:

Im Drittanbieter-Werkzeug „Adfind“ von MVP Joe Richards heißt der Schalter „–b“ für „base“:

Auf diese Weise lassen sich Sucherergebnisse recht einfach für die Suche in bestimmten OUs und Containern einstellen. Es ist also keine Frage des richtigen Attributes, sondern eine Frage des Startpunktes, an dem gesucht wird.

Für Skripting-Freunde haben die Scripting Guys auf ihrem Blog exzellente Beispiele für die Suche nach Objekt-Pfaden: http://blogs.technet.com/heyscriptingguy/archive/2008/05/12/how-can-i-determine-the-distinguished-name-of-the-ou-where-the-logged-on-user-s-user-account-resides.aspx

Der Autor Florian Frommherz ist einer von drei deutschen MVPs für Gruppenrichtlinien und ist häufig in den Newsgroups und in den TechNet-Foren zu finden. Auf seinem (englischsprachigen) Blog http://www.frickelsoft.net/blog behandelt er viele Themen rund um Active Directory und Gruppenrichtlinien.