Benutzer Accounts im Active Directory suchen und finden
In den meisten Fällen, in denen ich Beispielscripte für die LDAP-Suche nach Active Directory Benutzern sehe, wird dort folgender LDAP Filter verwendet:
(&(objectClass=user)(objectCategory=person)) <- Ineffizient !!
Dies ist jedoch nicht die optimale Methode, um User Accounts zu suchen. Der Filter ist so gebaut, dass intern unnötig viel Server-Leistung verbraucht wird. Der Grund: Die zwei Filterkriterien "objectClass" und "objectCategory" - dadurch wird die technische Suche in der AD-Datenbank für den Server komplexer als sie es sein müßte. In Domänen mit einer relativ geringen Benutzeranzahl spielt das vielleicht keine große Rolle, es wird aber relevant, wenn eine Bereich durchsucht werden soll, in dem sich viele tausend Benutzerobjekte befinden.
Einen LDAP Filter mit nur einem Kriterium zu verwenden , also nur
(objectClass=user) <- Falscher Filter für die Suche nach User Objekten !!
oder nur
(objectCategory=person) <- Falscher Filter für die Suche nach User Objekten !!
ist auch keine gute Idee, denn dadurch werden jeweils nicht nur Benutzer, sondern auch Computer-Objekte oder Kontakte als Ergebnis zurückgeliefert. Schwieriger zu merken, aber viel effiziernter ist ein Filter, der das Attribut 'sAMAccountType' verwendet: Bei User Objekten hat dieses Attribut immer den Wert 805306368 - und das Attribut ist in der AD-Datenbank für schnelle Suchvorgänge indiziert. Der perfekte LDAP Filter für die Suche nach Benutzern lautet also
(samAccountType=805306368) <- Effizienter Filter für User Objekte :)
Die folgenden Beispiele zeigen die Verwendung dieses Filter in Verzeichnis Scripts. Zur allgemeinen Erläuterung von LDAP-Suchvorgängen lesen Sie das SelfADSI-Kapitel
"LDAP Objekte im Verzeichnis suchen".
Alle Benutzer Accounts der eigenen Domäne finden
Dieses Script findet alle Active Directory Benutzer Accounts in der Domäne, in der der aktuell angemeldete Benutzer Mitglied ist:
Anmerkung zu diesem Script:
Wenn wir Attribute auslesen, benutzen wir hier einen Trick um Laufzeitfehler zu vermeiden für den Fall, dass diese Attribute beim betreffenden Objekt garnicht existieren. Erst setzen wir die Variable auf einen Leer-String, dann versuchen wir den Attributwert zu lesen - für diese Befehle wird kurz die Laufzeitfehlerbehandlung deaktiviert. Durch den trennenden Doppelpunkt lassen sich hier zwei VBScript-Befehle in einer einzigen Zeile schreiben:
Alle Benutzer Accounts des eigenen Forests finden
Dieses Script findet alle Benutzer in dem Active Directory Forest, in der der aktuell angemeldete Benutzer Mitglied ist. Bitte beachten, dass hier nur diejenigen Attribute durchsucht werden können, die auch im Global Catalog enthalten sind. Das betrifft den Aufbau des Suchfilters als auch die Liste der Attribute, die in der Suche angefordert werden:
Alle deaktivierten Benutzer in irgendeiner Domäne/OU finden
Dieses Script findet alle Benutzer in der angegebenen Domäne oder OU. Verwenden Sie hier den passenden LDAP Pfad für die von Ihnen gewünschten Domänen bzw. OU. Außerdem können Sie hier noch andere Anmeldedaten für den Suchvorgang (Benutzernamen und Passwort) angeben: