Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Active Directory Service (ADS) per VBA auslesen

Forumthread: Active Directory Service (ADS) per VBA auslesen

Active Directory Service (ADS) per VBA auslesen
Armin
Hallo,
ich bin auf der Suche einer Möglichkeit, per VBA die Informationen aus dem Active Directory Service (ADS) für den angemeldeten User auszulesen.
So befinden sich in der ADS bspw. Tel-Nr., E-Mail-Adresse etc. für den angemeldeten Benutzer.
Gibt es eine Möglichkeit, diese Informationen auszulesen umd diese in eine Excel-Zelle einzutragen?
Vielen Dank für euere Tipps.
Schöne Grüße
Armin
Anzeige
AW: Active Directory Service (ADS) per VBA auslesen
14.01.2010 10:47:43
JoWE
Hallo Armin,
ich lasse diese Aufgabe von einem VB-Script erledigen und das Ergebnis in Excel ausgeben:
'Dies ist der Inhalt der VBS-Datei "Auswerung.vbs", diese ist mit Doppelklick ausführbar
'und öffnet schließlich die Excel-Arbeitsmappe
'überall wo nnn steht mußt Du natürlich Deine spezifischen Bezeichnungen eintragen
objConnection.Provider = "ADsDSOObject"
objConnection.Open "Active Directory Provider"
Set objCommand.ActiveConnection = objConnection
objCommand.Properties("Page Size") = 1000
objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
objCommand.CommandText = "SELECT sn,givenName,department,telephoneNumber,physicalDeliveryOfficeName,"
objCommand.CommandText = objCommand.CommandText & "otherTelephone,facsimileTelephoneNumber,streetAddress,l,"
objCommand.CommandText = objCommand.CommandText & "pager,samaccountname FROM 'LDAP://ou=Benutzer,ou=nn,"
objCommand.CommandText = objCommand.CommandText & "ou=nnnnn,DC=nnn,DC=nnn,DC=nn' "
objCommand.CommandText = objCommand.CommandText & "WHERE objectCategory='user' and samaccountname='nnn*' "
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
set excap=createobject("Excel.Application")
excap.Visible=true
excap.Workbooks.add
excap.cells(1,1).value="Deine Überschrift"
i=3
excap.cells(2,1).value="Name"
excap.cells(2,2).value="Vorname"
excap.cells(2,3).value="Abteilung"
excap.cells(2,4).value="Telefon"
excap.cells(2,5).value="Raum"
excap.cells(2,6).value="ext. Rufnummer"
excap.cells(2,7).value="Faxnummer"
excap.cells(2,8).value="Standort"
excap.cells(2,9).value="PDF"
excap.cells(2,10).value="LoginId"
Do Until objRecordSet.EOF
excap.cells(i,1).value="'" & objRecordSet.Fields("sn").Value
excap.cells(i,2).value="'" & objRecordSet.Fields("givenName").Value
excap.cells(i,3).value="'" & objRecordSet.Fields("department").value
excap.cells(i,4).value="'" & objRecordSet.Fields("telephoneNumber").value
excap.cells(i,5).value="'" & objRecordSet.fields("physicalDeliveryOfficeName").value
excap.cells(i,6).value="'" & join(objRecordSet.Fields("otherTelephone"),",")
excap.cells(i,7).value="'" & objRecordSet.Fields("facsimileTelephoneNumber").value
excap.cells(i,8).value="'" & objRecordSet.Fields("streetAddress").value & ", " & objRecordSet.Fields("l").value
excap.cells(i,9).value="'" & objRecordSet.Fields("pager").value
excap.cells(i,10).value="'" & objRecordSet.Fields("samaccountname").value
i=i+1
objRecordSet.MoveNext
Loop
excap.Visible=true
Wenn's hilft ist's gut
Gruß
Jochen
Anzeige
Datentyp für objConnection und objCommand ?
14.01.2010 11:16:21
NoNet
Hallo Jochen,
interessanter Ansatz ! Bei der Ausführung des VBS-Codes erhalte ich jedoch bereits in der Zeile objConnection.Provider = "ADsDSOObject" einen Fehler (Objekt erforderlich : 'objConnection')
Welchen Datentyp besitzen denn die Objektvariablen objConnection und objCommand ?
Welche DLLs müssen dazu registriert sein bzw. bei Umsetzung in Excel VBA : Welche Verweise müssen dazu gesetzt sein ?
Ich arbeite hier mit einem LDAP-Browser, aus dem ich die Server-Einträge nachvollziehen kann.
Gruß, NoNet
Anzeige
AW: Datentyp für objConnection und objCommand ?
14.01.2010 13:19:34
JoWE
Hallo NoNet,
siehe http://msdn.microsoft.com/en-us/library/aa746471(VS.85).aspx
Welche Datentypen erforderlich sind, ist mir auch noch nicht klar.
Habe allerdings das VB-Script nicht in VBA umgesetzt.
Der Gedanke, genau dies zu tun gefällt mir, werde es mal versuchen.
Sobald ich dann nähreres berichten kann melde ich mich.
Gruß
Jochen
Anzeige
AW: Datentyp für objConnection und objCommand ?
14.01.2010 13:49:54
Armin
Hallo Jochen,
super, hört sich gut an. Würde mich freuen, von Dir zu hören.
Viele Grüße und Dankeschön
Armin
AW: Active Directory Service (ADS) per VBA auslesen
14.01.2010 15:02:23
JoWE
Halllo nochmal,
der Verweis 'Active DS Type Library" ist zu aktivieren.
Danach steht dem Zugriff auf das AD nichts mehr im Wege.
objConnection und objCommand sind als Object zu DIMensionieren
Gruß
Jochen
Anzeige
;
Anzeige
Anzeige

Infobox / Tutorial

Active Directory Service mit VBA auslesen


Schritt-für-Schritt-Anleitung

Um Informationen aus dem Active Directory Service (ADS) mit Excel VBA auszulesen, folge diesen Schritten:

  1. Verweis aktivieren:

    • Öffne Excel und gehe zu Entwicklertools > Visual Basic > Extras > Verweise.
    • Aktiviere den Verweis auf die „Active DS Type Library“.
  2. VBA-Code erstellen:

    • Öffne ein neues Modul und füge den folgenden Code ein:
    Sub GetActiveDirectoryInfo()
       Dim objConnection As Object
       Dim objCommand As Object
       Dim objRecordSet As Object
       Dim i As Integer
    
       Set objConnection = CreateObject("ADODB.Connection")
       Set objCommand = CreateObject("ADODB.Command")
    
       objConnection.Provider = "ADsDSOObject"
       objConnection.Open "Active Directory Provider"
       Set objCommand.ActiveConnection = objConnection
       objCommand.Properties("Page Size") = 1000
       objCommand.Properties("Searchscope") = ADS_SCOPE_SUBTREE
       objCommand.CommandText = "SELECT sn,givenName,department,telephoneNumber,physicalDeliveryOfficeName," _
                               & "otherTelephone,facsimileTelephoneNumber,streetAddress,l," _
                               & "pager,samaccountname FROM 'LDAP://ou=Benutzer,ou=nn," _
                               & "ou=nnnnn,DC=nnn,DC=nnn,DC=nn' " _
                               & "WHERE objectCategory='user' and samaccountname='nnn*'"
    
       Set objRecordSet = objCommand.Execute
       i = 3
    
       ' Excel-Daten ausgeben
       With CreateObject("Excel.Application")
           .Visible = True
           .Workbooks.Add
           .Cells(2, 1).Value = "Name"
           .Cells(2, 2).Value = "Vorname"
           ' Füge weitere Spaltenüberschriften hinzu
    
           Do Until objRecordSet.EOF
               .Cells(i, 1).Value = objRecordSet.Fields("sn").Value
               .Cells(i, 2).Value = objRecordSet.Fields("givenName").Value
               ' Füge weitere Felder hinzu
               i = i + 1
               objRecordSet.MoveNext
           Loop
       End With
    
       objConnection.Close
    End Sub
  3. Code anpassen:

    • Ersetze ou=nn und DC=nnn durch deine spezifischen Active Directory Informationen.

Häufige Fehler und Lösungen

  • Fehler: Objekt erforderlich: 'objConnection'
    Stelle sicher, dass die objConnection-Variable korrekt deklariert und initialisiert ist. Verwende Set objConnection = CreateObject("ADODB.Connection").

  • Fehler: Verweis nicht gesetzt
    Überprüfe, ob der Verweis auf die „Active DS Type Library“ aktiviert ist.

  • Fehler: Keine Daten zurückgegeben
    Stelle sicher, dass die LDAP-Abfrage korrekt ist und dass du die richtigen Berechtigungen hast, um auf das Active Directory zuzugreifen.


Alternative Methoden

Eine Alternative zur Verwendung von VBA ist die Nutzung eines PowerShell-Skripts, das die Daten aus dem Active Directory abruft und in eine CSV-Datei exportiert. Dies kann dann in Excel importiert werden.


Praktische Beispiele

Hier ist ein Beispiel, wie du die Telefonnummer und E-Mail-Adresse eines Benutzers abrufen kannst:

objCommand.CommandText = "SELECT telephoneNumber, mail FROM 'LDAP://ou=Benutzer,ou=nn,ou=nnnnn,DC=nnn,DC=nnn' WHERE objectCategory='user' and samaccountname='nnn*'"

Du kannst die abgerufenen Daten entsprechend in deine Excel-Tabelle einfügen.


Tipps für Profis

  • Fehlerbehandlung einfügen: Implementiere On Error Resume Next und entsprechende Fehlerausgaben, um die Fehlersuche zu erleichtern.
  • Daten filtern: Verwende die WHERE-Klausel in deiner LDAP-Abfrage, um nur relevante Daten zu erhalten.
  • Performance optimieren: Teste die Abfrage mit einem kleineren Datensatz, bevor du sie auf das gesamte Active Directory anwendest.

FAQ: Häufige Fragen

1. Wie kann ich die Informationen für den aktuell angemeldeten Benutzer abrufen?
Du kannst die Environment.UserName Funktion in VBA verwenden, um den aktuellen Benutzernamen abzurufen und in der LDAP-Abfrage zu verwenden.

2. Muss ich eine bestimmte Excel-Version verwenden?
Die meisten Funktionen sind in Excel 2010 und höher verfügbar. Stelle sicher, dass dein Excel VBA die Active DS Type Library unterstützt.

3. Was ist ein LDAP-Verweis?
Ein LDAP-Verweis ist eine Verbindung zu einem anderen LDAP-Server oder -Verzeichnis. Du kannst Microsoft LDAP-Verweise verwenden, um deine Abfragen zu optimieren.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige