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

LDAP Active Directory

Forumthread: LDAP Active Directory

LDAP Active Directory
21.10.2007 16:18:00
Marc
Hallo zusammen
wie kann ich simpel überprüfen, ob eine emailadresse mit einer in der AD übereinstimmt?
im excel gebe ich eben einen usernamen "vorname.nachname" ein, anschliessend möchte ich tippfehler überprüfen (vergleich mit der ad) und auch gleich dem user ein mail schicken.
mail verschicken ist gelöst, aber eben die ad abfrage mit der mailadresse...da ich noch viel tiefer in die ad geschichte rein möchte (user in gruppen zuordnen) bin ich auch über buch oder internet-tipps dankbar.
kann da jemand weiterhelfen?
grüsse aus der schweiz
marc

Anzeige

9
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: LDAP Active Directory
22.10.2007 22:22:00
Tino
Hallo,
kann dir einen Code zum lesen der Adressen geben.
Musst Ihn nur noch etwas für deine Bedürfnisse anpassen!

Sub kontakte_lesen()
Dim KobjOutlook As Object
Dim KobjNS, KobjMF, KobjIt As Object
Dim AktuellerUserKontakte, zaehler, a As Variant
Set KobjOutlook = CreateObject("Outlook.Application")
Set KobjNS = KobjOutlook.GetNamespace("MAPI")
AktuellerUserKontakte = KobjNS.CurrentUser
For a = 1 To 20
On Error Resume Next
Set KobjMF = KobjNS.GetDefaultFolder(10)
If KobjMF = "Kontakte" Then Exit For
Next a
Set KobjIt = KobjMF.Items
KobjIt.Sort "[Lastname]", False
For zaehler = 1 To KobjIt.Count
Cells(1 + zaehler, 1) = KobjIt(zaehler).LastName & ", " _
& KobjIt(zaehler).Firstname
Next zaehler
End Sub
'**************weitere Optionen für Kontakte lesen
'CustomerID
'Title
'Firstname
'Middlename
'LastName
'Suffix
'FullName
'Jobtitle
'Categories
'Nickname
'Profession
'Gender
'BusinessAdressStreet
'BusinessAdressCity
'BusinessAdressState
'BusinessAdressPostalCode
'BusinessAdressCountry
'BusinessAdress
'HomeAdressStreet
'HomeAdressCity
'HomeAdressState
'HomeAdressPostalCode
'HomeAdressCountry
'HomeAdress
'BusinessTelephoneNumber
'BusinessFaxNumber
'HomeTelephoneNumber
'HomeFaxNumber
'EmailAddress1
'EmailAddress2
'MobileTelephoneNumber
'AutoTelephoneNumber
'ISDNNumber


Gruss
Tino

Anzeige
AW: LDAP Active Directory
23.10.2007 07:34:20
Marc
hallo tino
dein script bezieht aber die quelle von der kontaktliste des outlooks. ich sollte einene vergleich vom ldapverzeichnis in der ad machen können.
besten dank für deine mithilfe
gruess marc

AW: LDAP Active Directory
23.10.2007 07:42:00
Tino
Hallo,
was ist ein idapverzeichnis?
Gruss
Tino

Anzeige
AW: LDAP Active Directory
23.10.2007 07:49:51
Marc
hey, ups da het sich ein tippfehler eingeschlichen. das ding heisst LDAP
es handelt sich um eine datenbank auf dem domainkontroller wo alle userdaten abgelegt werden. diese datenbank kann jeder domainuser einsehen, resp, auslesen. und genau dort möchte ich eine abfrage starten. aber eben leider funzt das nicht.
habe ein vb script welches genau macht was ich möchte aber im ecxel tut es nicht mehr.
kennst du dich mit vbs aus?
gruess marc

Anzeige
AW: LDAP Active Directory
23.10.2007 07:56:00
tino
Hallo,
habe schon mal ein bar vba und vb6 Programme geschrieben.
Kenne aber deine datenbank nicht, ist dass eine art textdatei oder eine webseite oder in welchem format liegt diese datenbank vor?
Gruss
Tino

AW: LDAP Active Directory
23.10.2007 08:02:58
Marc
hmmm das sieht mir stark nach sql aus.
schau dir mal das folgende vbs an. evtl findest du eine zeile die vba nicht verstehen kann.
ich glaube es liegt an der zeile
strSQL = "SELECT " & ad_field & " FROM 'LDAP://" & sADDomain & "' WHERE samaccountname = '" & sSearch & "'"
hier das script
_____________________________________________________
On Error Resume Next
Set oWSHShell = CreateObject("Wscript.Shell")
dom=inputbox("domaene")
sUser=inputbox("user")
sADDomain = dom
oUser=funcADUserLookup("distinguishedName", sUser)
mail=funcADUserLookup("mail", sUser)
if oUser="" then
msgbox sUser & " nicht gefunden!"
else
msgbox ouser & vbcrlf & mail & vbcrlf
end if
'--query active directory

Function funcADUserLookup(ad_field, sSearch)
on error resume next
Set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConn
strSQL = "SELECT " & ad_field & " FROM 'LDAP://" & sADDomain & "' WHERE samaccountname = '" &  _
sSearch & "'"
objCommand.CommandText = strSQL
Set objRS = objCommand.Execute
funcADUserLookup = objRS.Fields(ad_field).Value
End Function


Anzeige
AW: LDAP Active Directory
23.10.2007 08:34:19
Tino
Hallo,
mir ist aufgefallen
1. keinerlei Deklarierung vorhanden.
2. sADDomain wurde nicht mit an die Funktion übergeben
mit Option Explicit kannst du eine Deklarierung erzwingen!
Habe zwar mit SQL abfragen noch nichts gemacht, aber diese Sachen sind mir schon mal aufgefallen,
vielleicht bringt dich dass ja weiter.

Option Explicit
Function funcADUserLookup(ad_field, sSearch, sADDomain)
Dim objConn As Object, objCommand As Object, objRS As Object
Dim strSQL As Variant
On Error Resume Next
Set objConn = CreateObject("ADODB.Connection")
objConn.Provider = "ADsDSOObject"
objConn.Open "Active Directory Provider"
Set objCommand = CreateObject("ADODB.Command")
objCommand.ActiveConnection = objConn
strSQL = "SELECT " & ad_field & " FROM 'LDAP://" & sADDomain & "' WHERE samaccountname = '"  _
& _
sSearch & "'"
objCommand.CommandText = strSQL
Set objRS = objCommand.Execute
funcADUserLookup = objRS.Fields(ad_field).Value
Set objConn = Nothing
Set objCommand = Nothing
Set objRS = Nothing
End Function
Sub Test_Ablauf()
Dim oWSHShell As Object
Dim dom As String, sUser As String, sADDomain As String
Dim ouser As String, mail As String
On Error Resume Next
Set oWSHShell = CreateObject("Wscript.Shell")
dom = InputBox("domaene")
sUser = InputBox("user")
sADDomain = dom
ouser = funcADUserLookup("distinguishedName", sUser, sADDomain)
mail = funcADUserLookup("mail", sUser, sADDomain)
If ouser = "" Then
MsgBox sUser & " nicht gefunden!"
Else
MsgBox ouser & vbCrLf & mail & vbCrLf
End If
Set oWSHShell = Nothing
End Sub


Gruss Tino

Das Forum lebt von Rückmeldungen!


Anzeige
AW: LDAP Active Directory
23.10.2007 10:24:02
Marc
HAMMER STARK --es tut
hallo tino
das finde ich absolut genial, jetzt kann ich an meinem Projekt weiter programmieren. es funktioniert absolut genial.
ich habe noch ein weiters vb-script welches ich ins excel rinbringen muss, aber ich hoffe das klappt, mit deinen ergänzungen in diesem script.
ansonsten poste ich in diesen post rein und bitte wieder um so professionelle hilfe.
danke nochmals für die super schnelle hilfe..
gruess marc

Anzeige
AW: und wieder einer glücklich!
23.10.2007 10:35:14
Tino
Hallo,
na dass ist ja super, wieder einer glücklich.
Gruss Tino

Das Forum lebt von Rückmeldungen!


Anzeige
;
Anzeige

Infobox / Tutorial

LDAP Active Directory in Excel nutzen


Schritt-für-Schritt-Anleitung

Um eine LDAP-Abfrage in Excel durchzuführen und Benutzerinformationen aus dem Active Directory abzurufen, kannst du folgendes VBA-Script verwenden:

  1. Öffne Excel und drücke ALT + F11, um den VBA-Editor zu starten.
  2. Klicke auf Einfügen > Modul, um ein neues Modul zu erstellen.
  3. Füge den folgenden Code in das Modul ein:
Option Explicit

Function funcADUserLookup(ad_field As String, sSearch As String, sADDomain As String) As Variant
    Dim objConn As Object, objCommand As Object, objRS As Object
    Dim strSQL As String
    On Error Resume Next
    Set objConn = CreateObject("ADODB.Connection")
    objConn.Provider = "ADsDSOObject"
    objConn.Open "Active Directory Provider"
    Set objCommand = CreateObject("ADODB.Command")
    objCommand.ActiveConnection = objConn
    strSQL = "SELECT " & ad_field & " FROM 'LDAP://" & sADDomain & "' WHERE samaccountname = '" & sSearch & "'"
    objCommand.CommandText = strSQL
    Set objRS = objCommand.Execute
    If Not objRS.EOF Then
        funcADUserLookup = objRS.Fields(ad_field).Value
    Else
        funcADUserLookup = ""
    End If
    Set objConn = Nothing
    Set objCommand = Nothing
    Set objRS = Nothing
End Function

Sub Test_Ablauf()
    Dim dom As String, sUser As String, sADDomain As String
    Dim ouser As String, mail As String
    On Error Resume Next
    dom = InputBox("Domaine")
    sUser = InputBox("Benutzername")
    sADDomain = dom
    ouser = funcADUserLookup("distinguishedName", sUser, sADDomain)
    mail = funcADUserLookup("mail", sUser, sADDomain)
    If ouser = "" Then
        MsgBox sUser & " nicht gefunden!"
    Else
        MsgBox ouser & vbCrLf & mail & vbCrLf
    End If
End Sub
  1. Schließe den VBA-Editor und kehre zu Excel zurück.
  2. Führe das Test_Ablauf Makro aus, um die Abfrage zu testen.

Häufige Fehler und Lösungen

  • Fehler: "User nicht gefunden!"

    • Überprüfe, ob der Benutzername korrekt eingegeben wurde und ob der Benutzer im Active Directory vorhanden ist.
  • Fehler: "Anmeldefehler"

    • Stelle sicher, dass du die richtigen Berechtigungen für den Zugriff auf das LDAP-Verzeichnis hast.
  • Problem mit der Deklarierung

    • Füge Option Explicit am Anfang deines Moduls hinzu, um sicherzustellen, dass alle Variablen deklariert werden.

Alternative Methoden

Falls du eine einfachere Methode bevorzugst, kannst du auch Excel-Funktionen wie WEBSERVICE oder FILTERXML verwenden, um Daten aus einem LDAP-Server abzurufen, wenn dieser über eine API erreichbar ist.

Zusätzlich gibt es Tools und Add-Ins, die eine grafische Benutzeroberfläche bieten, um auf LDAP-Daten zuzugreifen, ohne direkt mit VBA zu arbeiten.


Praktische Beispiele

  1. Benutzerdaten abfragen:

    • Verwende das oben dargestellte VBA-Script, um Informationen zu einem Benutzer zu suchen. Beispiel: Suche nach dem Benutzer "john.doe".
  2. E-Mail-Versand:

    • Nachdem du die E-Mail-Adresse aus dem Active Directory abgefragt hast, kannst du diese verwenden, um automatisch E-Mails zu versenden.
Sub SendMailToUser(email As String)
    Dim objOutlook As Object
    Set objOutlook = CreateObject("Outlook.Application")
    Dim objMail As Object
    Set objMail = objOutlook.CreateItem(0)
    With objMail
        .To = email
        .Subject = "Test E-Mail"
        .Body = "Dies ist eine Test-E-Mail."
        .Send
    End With
End Sub

Tipps für Profis

  • Debugging: Setze Breakpoints im VBA-Editor, um den Code Schritt für Schritt zu durchlaufen und Fehler zu finden.
  • Performance: Bei umfangreichen LDAP-Abfragen solltest du sicherstellen, dass die Abfragen effizient sind, um die Ladezeiten zu reduzieren.
  • Sicherheitsaspekte: Stelle sicher, dass alle Abfragen mit den richtigen Berechtigungen erfolgen, um Sicherheitsverletzungen zu vermeiden.

FAQ: Häufige Fragen

1. Was ist LDAP?
LDAP steht für Lightweight Directory Access Protocol und wird verwendet, um Informationen aus einem Verzeichnisdienst wie Active Directory abzurufen.

2. Wie kann ich sicherstellen, dass mein VBA-Code richtig funktioniert?
Verwende Debug.Print in deinem Code, um Variablenwerte zu überprüfen und mögliche Fehlerquellen zu identifizieren.

3. Benötige ich spezielle Berechtigungen, um auf Active Directory zuzugreifen?
Ja, du benötigst die entsprechenden Berechtigungen, um auf die LDAP-Daten im Active Directory zugreifen zu können.

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