2016-06-22 5 views
0

Ich habe eine Anwendung, wo ich Kontakte aus Active Directory ziehen muss.Suche nach Kontakten in ActiveDirectory (.NET)

Hier ist der Code, den ich verwende:

Public Function GetADContacts(ByVal LastNameStarts As String) As DirectoryServices.SearchResultCollection 
    Dim rootDSE As New DirectoryServices.DirectoryEntry("LDAP://RootDSE") 
    Dim defaultNamingContext As String = rootDSE.Properties("defaultNamingContext").Value.ToString() 
    Dim objSearch As New DirectoryServices.DirectorySearcher() 
    Dim cllQueryResults As DirectoryServices.SearchResultCollection 

    With objSearch 
     .SearchRoot = New DirectoryServices.DirectoryEntry("LDAP://" + defaultNamingContext) 
     .Filter = "(&(objectclass=contact)(mailNickname=*)(cn=*)(sn=" + LastNameStarts + "*)(givenname=*))" 
     .SearchScope = DirectoryServices.SearchScope.Subtree 
     .PropertiesToLoad.AddRange(New String() {"cn", "sn", "givenname", "mailNickname"}) 
     .Sort.PropertyName = "sn" 
     .Sort.Direction = DirectoryServices.SortDirection.Ascending 
     cllQueryResults = .FindAll() 
    End With 

    Return cllQueryResults 
End Function 

ich überprüft haben, um sicherzustellen, haben die Kontakte sn, cn, given und Mailnickname-Attribute gesetzt, aber nichts zurückgegeben. Wenn ich die Objektkategorie zu Benutzer ändere, bekomme ich alle Benutzer, aber für Kontakte bekomme ich nichts.

Gibt es etwas, was ich falsch mache?

Antwort

0

Wenn Sie nach Kontakten suchen möchten nur Ihre Filter sollte wie folgt aussehen:

Searcher.Filter = "(&(objectCategory=person)(objectClass=contact))" 

Hier ein kleines Beispiel die DN aller Kontakte zu erhalten:

Dim Searcher As New DirectorySearcher("LDAP://") 
Dim QueryResults As SearchResultCollection 
Dim Result As SearchResult 

Searcher.PropertiesToLoad.Add("distinguishedName") 
Searcher.Filter = "(&(objectCategory=person)(objectClass=contact))" 

QueryResults = Searcher.FindAll 

For Each Result In QueryResults 
    Console.WriteLine(Result.Properties("distinguishedName")(0)) 
Next 

Console.ReadLine() 

Es ist ein sehr hilfreiches Artikel zu diesem Thema: Active Directory: LDAP Filter Syntax. Leider habe ich den Link nicht gespeichert .. Ich werde versuchen, es später zu liefern.