Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: poldy06 am 29.07.14 - 16:59:38

Titel: Per LDAP die AD abfragen
Beitrag von: poldy06 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


Titel: Re: Per LDAP die AD abfragen
Beitrag von: stoeps 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?
Titel: Re: Per LDAP die AD abfragen
Beitrag von: Thomas Schulte am 29.07.14 - 22:22:37
Setz anstelle der " einen |
Titel: Re: Per LDAP die AD abfragen
Beitrag von: poldy06 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!
Titel: Re: Per LDAP die AD abfragen
Beitrag von: Thomas Schulte 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.
Titel: Re: Per LDAP die AD abfragen
Beitrag von: ghostmw 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 ?
Titel: Re: Per LDAP die AD abfragen
Beitrag von: Thomas Schulte 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.
Titel: Re: Per LDAP die AD abfragen
Beitrag von: poldy06 am 30.07.14 - 12:51:19
Vielen vielen Dank!

Wie doof kann man sein  :o

Die Leerzeichen - so logisch!  ;D