Das folgende Skript gibt den Wert eines beliebigen Attributs aus dem Active Directory für einen User zurück, dessen Logon-Name (SAM-Name, sAMAccountName) bekannt ist. Das ist nützlich, wenn beispielsweise zu der bekannten Systemvariablen %username% die Mailadresse, die Telefonnummer, der LDAP-Pfad oder irgendwas anderes aus dem AD erfragt werden soll.
Es gibt auch die Möglichkeit, das COM-Objekt „ADSystemInfo“ zu nutzen, das eine ganze Reihe von Informationen über den gerade angemeldeten Benutzer zurückgibt. In vielen Situationen ist das die einfachste und schnellste Variante. Das hier gezeigte Script hat aber den Vorteil, dass es beliebige Logonnamen zu beliebigen AD-Feldern auflösen kann, nicht nur den des gerade angemeldeten Users. Dadurch ist es sehr flexibel.
Funktionsweise: Die aufzurufende Funktion „SAM2ADInfo“ erwartet zwei Parameter: der erste ist der Loginname, der zweite ist der ADSI-Name des Feldes, das zurückgegeben werden soll. Eine Übersicht über wichtige Feldnamen findet sich hier.
SAM2ADInfo.vbs (1,1 KiB, 1.827-mal heruntergeladen, letzte Änderung am 12. Februar 2013)
-
strLDAP = SAM2ADInfo(„NilsK“, „mail“)
- WSCript.Echo strLDAP
-
function SAM2ADInfo(strSAMName, strField)
-
‚ Funktion: Übersetzt den übergebenen SAMAccountName per ADS-Abfrage in ein beliebiges ADS-Feld
-
‚ Eingabeparameter: strSAMName: Der NT-Anmeldename; strField: ADSI-Name des erwarteten Feldes
-
‚ Rückgabewert: Der gefundene Wert oder ein Leerstring
-
Dim objConn
-
Dim objCommand
-
dim objArgs
-
On Error Resume Next
-
‚Create ADO connection object for Active Directory
-
Set objConn = CreateObject(„ADODB.Connection“)
-
objConn.Provider = „ADsDSOObject“
-
objConn.Open „Active Directory Provider“
-
if checkit(„Fehler beim ADO-Zugriff auf Active Directory!“) then exit function
-
‚Create ADO command object for the connection.
-
Set objCommand = CreateObject(„ADODB.Command“)
-
objCommand.ActiveConnection = objConn
-
if checkit(„Fehler beim Definieren des ADO-Kommandos!“) then exit function
-
‚Get the ADsPath for the domain to search.
-
Set objRoot = GetObject(„LDAP://rootDSE“)
-
strDomain = objRoot.Get(„defaultNamingContext“)
-
Set objDomain = GetObject(„LDAP://“ & strDomain)
-
if checkit(„Fehler beim Ansprechen des Active Directory!“) then exit function
-
‚Abfrage
-
strSQL = „SELECT „ & strField & “ FROM ‚“
-
strSQL = strSQL & „LDAP://“ & strDomain & „‚ WHERE sAMAccountName = ‚“ & strSAMName & „‚“
-
‚Assemble the commandtext.
-
objCommand.CommandText = strSQL
-
if checkit(„Fehler beim Übergeben des Kommandos!“) then exit function
-
‚Execute the query.
-
Set objRS = objCommand.Execute
-
if checkit(„Fehler beim Ausführen der Suche im Active Directory!“) then exit function
-
strOutput = „“
-
strOutput = objRS.Fields(0).value
-
on error goto 0
-
SAM2ADInfo = strOutput
-
end function
-
‚ Fehlerprüfung
-
function checkit(Nachricht)
-
checkit = false
-
if err.number <>0 then
-
Nachricht = Nachricht & “ [„ & err.description & “ („ & err.number & „)]“
-
wscript.echo Nachricht
-
err.clear
-
checkit=true
-
end if
-
end function
OU des angemeldeten Benutzers herausfinden
Um etwa die OU des angemeldeten Benutzers im Logonscript herauszufinden, ersetze man die erste Zeile des obigen Skripts durch folgenden Block:
-
Set objNet = CreateObject(„Wscript.Network“)
-
strUser = objNet.UserName
-
WScript.Echo SAM2ADInfo(strUser, „distinguishedName“)
http://faq-o-matic.net/?p=551