Domino 9 und frühere Versionen > ND8: Entwicklung
LDAP Abfrage gegen Active Directory
Lloyd:
Hallo,
ich frage unser Active Directory nach dessen Benutzerkonten ab, bzw. versuche ich das. Ich erhalte aber immer alle möglichen Objekte zurück wie z.B. GPOs, WMI-Filter, Verzeichnisfreigaben, Benutzerkonten. Seltsamerweise aber nicht alle GPOs und nicht alle WMI-Filter, bzw. Verzeichnisfreigabe, sondern nur einige. In der folgenden Zeile wird das doch normalerweise über den "objectCategory = User" entsprechend eingegrenzt. Das funktioniert aber irgendwie nicht richtig.
objCommand.CommandText = "Select Name, mail, title, samAccountName, description, homeDirectory, profilePath, badPwdCount, logonCount, lastLogonTimestamp, objectCategory FROM 'LDAP://" & Cstr(askme) & "' WHERE objectCategory='User'"
Der Rückgabewert aus objectCategory sieht so aus: CN=Person,CN=Schema,CN=Configuration,DC=X1234,DC=ADC,DC=Test,DC=DE
Hat jemand einen Tipp für mich ?
Anbei noch mein komplettes Script:
-------------------------------------------------------------
On Error Resume Next
Dim ws As New NotesUIWorkspace
Dim s As New NotesSession
Dim db As NotesDatabase
Dim askme As Variant
Dim ldap_name As String, ldap_mail As String, ldap_title As String, ldap_samAccountName As String, ldap_description As Variant, ldap_descriptionb As String
Dim ldap_homedir As String, ldap_profildir As String, ldap_badpwd As Variant, ldap_logoncount As Variant, ldap_lastLogon As Variant, ldap_objectCategory As Variant
askme = ws.Prompt (PROMPT_OKCANCELEDIT, "Wie heißt Ihr Domain Controller", "IP-Adresse oder WSID Ihres Domain-Controller. z.B. FS001234 oder 10.130.45.678")
If Not Isempty (askme) Then
Set db = s.CurrentDatabase
Const ADS_SCOPE_SUBTREE = 2
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 Name, mail, title, samAccountName, description, homeDirectory, profilePath, badPwdCount, logonCount, lastLogonTimestamp, objectCategory FROM 'LDAP://" & Cstr(askme) & "' WHERE objectCategory='User'"
Set objRecordSet = objCommand.Execute
objRecordSet.MoveFirst
Do Until objRecordSet.EOF
ldap_name = ""
ldap_mail = ""
ldap_title = ""
ldap_samAccountName = ""
ldap_description = ""
ldap_descriptionb = ""
ldap_homedir = ""
ldap_profildir = ""
ldap_badpwd = ""
ldap_logoncount = ""
ldap_lastlogon = ""
ldap_objectCategory = ""
ldap_name = objRecordSet.Fields("name").Value
ldap_mail = objRecordSet.Fields("mail").Value
ldap_title = objRecordSet.Fields("title").Value
ldap_samAccountName = objRecordSet.Fields("samAccountName").Value
ldap_description = objRecordSet.Fields("description").Value
ldap_descriptionb = ldap_description(0)
ldap_homedir = objRecordSet.Fields("homeDirectory").Value
ldap_profildir = objRecordSet.Fields("profilePath").Value
ldap_badpwd = objRecordSet.Fields("badPwdCount").Value
ldap_logoncount = objRecordSet.Fields("logonCount").Value
ldap_lastlogon = objRecordSet.Fields("lastLogonTimestamp").Value
ldap_objectCategory = objRecordSet.Fields("objectCategory").Value
Call NeuerBenutzer(ldap_name, ldap_mail, ldap_title, ldap_samAccountName, ldap_descriptionb, ldap_homedir, ldap_profildir, ldap_badpwd, ldap_logoncount, ldap_lastlogon, ldap_objectCategory, db)
objRecordSet.MoveNext
Loop
Call ws.ViewRefresh
End If
Tode:
Versuch mal mit objectClass = 'Person'... das ist eventuell sicherer als die Category abzufragen
Lloyd:
Hi Tode,
sorry dass ich mich jetzt erst wieder melde.
Jetzt krieg ich zwar keine GPOs und WMI-Filter mehr, dafür aber neben den Personen alle Computerkonten mitgeliefert.
Ich könnte zwar jetzt die objectCategorie noch zusätzlich auslesen, und abfangen ob am Anfang CN=Person oder CN=Computer enthält, aber es müßte doch auch möglich sein wirklich nur die entsprechenden Objekte auszulesen, oder?
Lloyd:
Ergänzung:
Wenn ich mir den Inhalt von objectClass als Variant zurückgeben lasse, erhalte ich folgenden Inhalt:
[0] top
[1] person
[2] organizationalPerson
[3] user
[4] computer
Bei Personen fehlt der Eintrag [4], bei Computerkonten ist er da.
Bei Gruppen heißt der Eintrag [3] contact
Tode:
Offensichtlich ist das ein Ad- LDAP- Problem und Du solltest bei denen nachfragen, die das LDAP- schema im ad kennen... Hat ja nix mehr mit Notes selbst zu tun, weil der nur verarbeitet, was das ad aufgrund der ldapsearch liefert....
Navigation
[0] Themen-Index
[#] Nächste Seite
Zur normalen Ansicht wechseln