Printout Header
RSS Feed

Deaktivierte Benutzer im Active Directory suchen und finden


Wir benutzen für diese Suche das Active Directory Attribut userAccountControl, in dem bei Domänencontrollern das Bit UF_SERVER_TRUST_ACCOUNT (8192) gesetzt ist. Der SelfADSI-Artikel über LDAP Filter beschreibt genau, wie man nach einzelnen Flags in derartigen Bitfledern sucht. Zur allgemeinen Erläuterung von LDAP-Suchvorgängen lesen Sie das SelfADSI-Kapitel "LDAP Objekte im Verzeichnis suchen".


Alle deaktivierten Benutzer der eigenen Domäne finden


Dieses Script findet alle deaktivierten Active Directory Benutzerin der Domäne, in der der aktuell angemeldete Benutzer Mitglied ist:

ldapFilter = "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=2))" Set rootDSE = GetObject("LDAP://rootDSE") domainDN = rootDSE.Get("defaultNamingContext") Set ado = CreateObject("ADODB.Connection") ado.Provider = "ADSDSOObject" ado.Open "ADSearch" Set objectList = ado.Execute("<LDAP://" & domainDN & ">;" & ldapFilter & _  ";distinguishedName,samAccountName,displayname,userPrincipalName;subtree") While Not objectList.EOF userDN = objectList.Fields("distinguishedName") logonName = objectList.Fields("samAccountName") On Error Resume Next displayName = "" : displayName = objectList.Fields("displayname") logonNameUPN = "" : logonNameUPN = objectList.Fields("userPrincipalName") On Error Goto 0 WScript.Echo logonName & ";" & logonNameUPN & ";" & displayName & ";" & userDN objectList.MoveNext Wend

Einige Anmerkungen zu diesem Script:

Der LDAP Filter, mit dem hier allgemein Benutzer gesucht werden, lautet (samAccountType=805306368). Beachten Sie, dass dies effizienter und schneller als der Filter ist, der hier sonst oft dafür verwendet wird: (&(objectCategory=person)(objectClass=user)).

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:

... On Error Resume Next displayName = "" : displayName = objectList.Fields("displayname") On Error Goto 0

Alle deaktivierten Benutzer in irgendeiner Domäne/OU finden


Dieses Script findet alle deaktivierten 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:

searchDN = "DC=example,DC=com" 'den Suchcontainer / die Domäne angeben serverName = "192.168.0.66" 'den Namen/die Adresse des Domänencontrollers angeben userName = InputBox("Enter user name","Credentials") 'möglich wäre auch einen statischen Username, z.B: "EXAMPLE\userXYZ" password = InputBox("Enter password","Credentials") 'möglich wäre auch ein statisches Passwort, z.B. "P@ssw0rd" ldapFilter = "(&(samAccountType=805306368)(userAccountControl:1.2.840.113556.1.4.803:=2))" Set ado = CreateObject("ADODB.Connection") ado.Provider = "ADSDSOObject" ado.Properties("User ID") = userName ado.Properties("Password") = password ado.Properties("Encrypt Password") = True ado.Open "ADSearch" Set objectList = ado.Execute("<LDAP://" & serverName & "/" & searchDN & ">;" & ldapFilter & _  ";distinguishedName,samAccountName,displayname,userPrincipalName;subtree") While Not objectList.EOF userDN = objectList.Fields("distinguishedName") logonName = objectList.Fields("samAccountName") On Error Resume Next displayName = "" : displayName = objectList.Fields("displayname") logonNameUPN = "" : logonNameUPN = objectList.Fields("userPrincipalName") On Error Goto 0 WScript.Echo logonName & ";" & logonNameUPN & ";" & displayName & ";" & userDN objectList.MoveNext Wend