Autor Thema: Per LDAP die AD abfragen  (Gelesen 4598 mal)

Offline poldy06

  • Frischling
  • *
  • Beiträge: 37
Per LDAP die AD abfragen
« am: 29.07.14 - 16:59:38 »
Guten Tag,
ich hätt da gern mal ein Problem:
Ich versuche aus dem Windows AD die Usernamen rauszubekommen, in dem ich per LDAP mit der Mailadresseabfrage.
Ein Notesscript dazu habe ich bei MS (http://searchdomino.techtarget.com/tip/Search-Microsoft-Active-Directory-with-LotusScript)
gefunden und modifiziert:

Function SearchLDAP(userName As String) As String  
   Dim objConnection As Variant
   Dim objCommand As Variant
   Dim objRecordSet As Variant
   Const ADS_SCOPE_SUBTREE = 2
   On Error Goto errHandler
   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
   
    ' Note: I've used cn field of Active Directory for selection, Other fields like, mail, sn etc can be used instead
   objCommand.CommandText = "SELECT sAMAccountName FROM 'LDAP://Ip des AD Servers:389' WHERE userPrincipalName=  'Mein.Name@Firma.com'   "
   
   Set objRecordSet = objCommand.Execute
   If ( objRecordSet.RecordCount = 0 ) Then
       SearchLDAP="0"
   Else
        SearchLDAP = objRecordSet.Fields("sAMAccountName").Value
   End If
   objRecordSet.close
   Exit Function

errHandler:
   Msgbox "Error is : " & Error$ & " at line number : " & Cstr(Erl) & " in SearchLDAP() " & " while processing user : " & Username
   Exit Function
End Function

Die objCommand.CommandText - Zeile ist das entscheidende, bzw mein Problem. Wenn sie so ist, also die Mailadresse fest reingeschrieben funktioniert alles. Aber ich will natürlich das ganze dynamisch haben.
Also es gibt ein Textfeld, da kommt die Mailadresse rein und dann soll die Abfrage diese benutzen.
Allerdings bekomme ich dann kein Ergebnis vom AD geliefert.
Ich habe alles probiert, was mir geläufig ist, aber nichts hilft.
Ich vermute, dass die Übergabe des Feldinhaltes die Probleme auslöst.

Diese Zeile wäre aus dem Orginal abgewandelt
objCommand.CommandText = "SELECT sAMAccountName FROM 'LDAP://Ip des AD Servers:389' WHERE userPrincipalName= "'"+userName+"'

Aber mit der Kombination an " und ' bin ich nicht glücklich und bekomme auch eine Fehlermeldung "Provider: Der Befehl enthielt mind. einen Fehler"  :o
Ich habe diesen übergebenen Wert userName schon unbenannt, ohne Erfolg ;)
Dann in eine andere Variable genommen und ' vorne und hinten angefügt und dann in den String aufgenommen, nutzte nix  :-:
Nu bin ich mit meinem Latein am Ende.
Hat jemand ne Idee oder gar ne funktionierende Lösung?
Vielen Dank!
Sonnige Grüße aus dem Norden!
Kurt


« Letzte Änderung: 29.07.14 - 17:04:14 von poldy06 »

Offline stoeps

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 831
  • Geschlecht: Männlich
  • It's your life, so live it your way.
    • Stoeps.de
Re: Per LDAP die AD abfragen
« Antwort #1 am: 29.07.14 - 20:42:20 »
Diese Zeile wäre aus dem Orginal abgewandelt
objCommand.CommandText = "SELECT sAMAccountName FROM 'LDAP://Ip des AD Servers:389' WHERE userPrincipalName= "'"+userName+"'

Muss das nicht einfach

objCommand.CommandText = "SELECT sAMAccountName FROM 'LDAP://Ip des AD Servers:389' WHERE userPrincipalName=  '" +userName+ "'   "

heißen? Also vor dem userName Hochkomma Doppelhochkomma und danach Doppel, Einfach, Doppel

Ich bin ja kein Entwickler, aber müßte +userName+ nicht &userName& sein?
--
Grüsse
Christoph

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Per LDAP die AD abfragen
« Antwort #2 am: 29.07.14 - 22:22:37 »
Setz anstelle der " einen |
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline poldy06

  • Frischling
  • *
  • Beiträge: 37
Re: Per LDAP die AD abfragen
« Antwort #3 am: 30.07.14 - 10:49:16 »
Vielen Dank für die Antworten.

Das kfm Und funktioniert nicht hier.

Nach der Umsetzung Eurer Tipps sieht der String jetzt so aus:
   objCommand.CommandText = |SELECT sAMAccountName FROM 'LDAP://192.168.1.52:389' WHERE userPrincipalName= ' |  +userName+ | ' |

Gibt keine Fehlermeldung aber leider auch kein Resultat!

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Per LDAP die AD abfragen
« Antwort #4 am: 30.07.14 - 11:47:38 »
Was steht in deinem userName drin.

Bau dir den CommandString als String zusammen und übergebe diesen String anstelle von dem was du tust.
Also:
Me_commandText = |SELECT sAMAccountName FROM 'LDAP://192.168.1.52:389' WHERE userPrincipalName= ' |  +userName+ | ' |
objCommand.CommandText = me_CommandText

Was sagt der AD LDAP Server bezogen auf diese Anfrage. Du kannst einen AD Server so konfigurieren das er dir Meldungen ausgibt was da gerade getan wird.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline ghostmw

  • Aktives Mitglied
  • ***
  • Beiträge: 201
  • Geschlecht: Männlich
    • BELOS - Raum+Ressourcenmanagement unter Lotus Notes
Re: Per LDAP die AD abfragen
« Antwort #5 am: 30.07.14 - 11:54:19 »
... die Leerzeichen vor den Pipes macht ihr aber schon noch raus vorher, oder ?

also
Code
Me_commandText = |SELECT sAMAccountName FROM 'LDAP://192.168.1.52:389' WHERE userPrincipalName= '|  +userName+ |'|
objCommand.CommandText = me_CommandText

weil " Name " ist was anderes als "Name" oder nicht ?
Grüße
Marco Weller
Lotus Domino / Lotus Notes seit 1996 (ab 4.5x)

Offline Thomas Schulte

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 4.388
  • Geschlecht: Männlich
  • Ich glaub mich tritt ein Pferd
Re: Per LDAP die AD abfragen
« Antwort #6 am: 30.07.14 - 12:19:25 »
... die Leerzeichen vor den Pipes macht ihr aber schon noch raus vorher, oder ?

also
Code
Me_commandText = |SELECT sAMAccountName FROM 'LDAP://192.168.1.52:389' WHERE userPrincipalName= '|  +userName+ |'|
objCommand.CommandText = me_CommandText

weil " Name " ist was anderes als "Name" oder nicht ?
Stimmt.
Thomas Schulte

Collaborative Project Portfolio and Project Management Software

"Aber wo wir jetzt einmal soweit gekommen sind, möchte ich noch nicht aufgeben. Versteh mich recht, aufgeben liegt mir irgendwie nicht."

J.R.R.Tolkien Herr der Ringe, Der Schicksalsberg

OpenNTF Project: !!HELP!! !!SYSTEM!!  !!DRIVER!!

Skype: thomasschulte-kulmbach

Offline poldy06

  • Frischling
  • *
  • Beiträge: 37
Re: Per LDAP die AD abfragen
« Antwort #7 am: 30.07.14 - 12:51:19 »
Vielen vielen Dank!

Wie doof kann man sein  :o

Die Leerzeichen - so logisch!  ;D

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz