在ActiveDirectory(.NET)中搜索联系人



我有一个应用程序,我需要从Active Directory中摘下联系人。

这是我正在使用的代码:

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

我已检查以确保联系人具有SN,CN,fivenname和MailnickName属性集,但没有返回。当我将对象分类更改为用户时,我会获取所有用户,但是对于联系人,我什么也没得到。

我做错了什么?

如果要搜索联系人,只有过滤器应该看起来像这样:

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

这里有一个示例以获取所有联系人的DN:

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()

有一篇关于此主题的非常有用的文章:Active Directory:LDAP滤波器语法。可悲的是,我没有保存链接。.我稍后会尝试提供。

最新更新