Logo faq-o-matic.net
Logo faq-o-matic.net

Ein AD-Attribut zu einem Logon-Namen herausfinden

von veröffentlicht am28. Juli 2004, 14:59 Uhr Kurzlink http://faq-o-matic.net/?p=551 Zitatlink
Kategorie Kategorie: Active Directory, AD: Erweiterte Abfragen, Scripting   Translate with Microsoft Translator Translate EN

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.

  1. strLDAP = SAM2ADInfo("NilsK", "mail")
  2.  
  3. function SAM2ADInfo(strSAMName, strField)
  4. ' Funktion: Übersetzt den übergebenen SAMAccountName per ADS-Abfrage in ein beliebiges ADS-Feld
  5. ' Eingabeparameter: strSAMName: Der NT-Anmeldename; strField: ADSI-Name des erwarteten Feldes
  6. ' Rückgabewert: Der gefundene Wert oder ein Leerstring
  7.  
  8.     Dim objConn
  9.     Dim objCommand
  10.     dim objArgs
  11.  
  12.     On Error Resume Next
  13.  
  14.  
  15.     'Create ADO connection object for Active Directory
  16.     Set objConn = CreateObject("ADODB.Connection")
  17.     objConn.Provider = "ADsDSOObject"
  18.     objConn.Open "Active Directory Provider"
  19.     if checkit("Fehler beim ADO-Zugriff auf Active Directory!") then exit function
  20.  
  21.     'Create ADO command object for the connection.
  22.     Set objCommand = CreateObject("ADODB.Command")
  23.     objCommand.ActiveConnection = objConn
  24.     if checkit("Fehler beim Definieren des ADO-Kommandos!") then exit function
  25.  
  26.     'Get the ADsPath for the domain to search.
  27.     Set objRoot = GetObject("LDAP://rootDSE")
  28.     strDomain = objRoot.Get("defaultNamingContext")
  29.     Set objDomain = GetObject("LDAP://" & strDomain)
  30.     if checkit("Fehler beim Ansprechen des Active Directory!") then exit function
  31.  
  32.     'Abfrage
  33.     strSQL = "SELECT " & strField & " FROM '"
  34.     strSQL = strSQL & "LDAP://" & strDomain & "' WHERE sAMAccountName = '" & strSAMName & "'"
  35.  
  36.     'Assemble the commandtext.
  37.     objCommand.CommandText = strSQL
  38.     if checkit("Fehler beim Übergeben des Kommandos!") then exit function
  39.  
  40.     'Execute the query.
  41.     Set objRS = objCommand.Execute
  42.     if checkit("Fehler beim Ausführen der Suche im Active Directory!") then exit function
  43.  
  44.     strOutput = ""
  45.     strOutput = objRS.Fields(0).value
  46.  
  47.     on error goto 0
  48.  
  49.     SAM2ADInfo = strOutput
  50.  
  51. end function
  52.  
  53.  
  54. ' Fehlerprüfung
  55. function checkit(Nachricht)
  56.     checkit = false
  57.     if err.number <>0 then
  58.         Nachricht = Nachricht & " [" & err.description & " (" & err.number & ")]"
  59.                 wscript.echo Nachricht
  60.         err.clear
  61.         checkit=true
  62.     end if
  63. 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:

  1. Set objNet = CreateObject("Wscript.Network")
  2. strUser = objNet.UserName
  3. WScript.Echo SAM2ADInfo(strUser, "distinguishedName")

 

Verwandte Beiträge:

  1. Wie kann ich zu einem SID den Namen herausfinden?
    Wenn ein SID bekannt ist (beispielsweise weil er in einer Berechtigungsliste auftaucht), aber der Name dazu fehlt, kann man sich...
  2. Wie kann ich zu einem Namen den SID (Security Identifier) herausfinden?
    Um den SID eines Benutzer- oder Gruppenkontos herauszufinden, gibt es keinen eingebauten Befehl. Mit einem WMI-Script geht es aber recht...
  3. Datum des AD-Backup per Skript herausfinden
    Möchte man das Datum herausfinden, zu dem Active Directory zuletzt gesichert wurde, so gibt es eine recht einfache Methode: Ab...
  4. [Update] Bug im DSCT: Kein Recovery bei Backslash im Namen
    Fredrik Lindström hat uns das hervorragende Werkzeug “Directory Services Comparison Tool” geschenkt. Es kann auf Windows Server 2008 (und später)...
  5. Warum kann ich einen User nicht mit dem "memberOf"-Attribut einer Gruppe hinzufügen?
    Das Feld "memberOf" ist ein sog. "Backlink"-Feld, das zur Abfragezeit berechnet wird. Sein Wert setzt sich "rückwärts" aus den Gruppenmitgliedschaften...

© 2005-2012 bei faq-o-matic.net. Alle Rechte an den Texten liegen bei deren Autorinnen und Autoren.

Jede Wiederveröffentlichung der Texte oder von Auszügen daraus - egal ob kommerziell oder nicht - bedarf der ausdrücklichen Genehmigung durch die jeweiligen Urheberinnen oder Urheber.

Das Impressum findet sich unter: http://www.faq-o-matic.net/impressum/

Danke, dass du faq-o-matic.net nutzt. Du hast ein einfaches Blog sehr glücklich gemacht!