过滤器使用directorysearcher搜索distinguishedname,mail和proxies

时间:2014-08-20 14:05:01

标签: c# directoryservices

我目前正在实施一个方法,该方法返回活动目录中找到的所有电子邮件地址(搜索参数是邮件地址的第一部分)。在方法的第一次迭代中,我使用了互操作方法,但它们花了40多秒才得到所需的结果。然后我尝试了目录搜索器,它在2(或更短)秒内返回结果。所以我现在正走这条路。当我使用以下代码时,我得到所有代理地址,其中Test作为其名称的一部分(如果我将使用smtp:{0} *我将获得所有以Test开头的代理地址)。

现在我不确定是什么(以及我的问题是什么)如何扩展过滤器以便它获取所有条目,其中proxyaddresses,uniquenames或主要smtp地址将Test作为其值的一部分(因此对于所有3件事同时将它们视为“OR”过滤而不是和?)?

String emailPart = "Test";
String customFilter = string.Format("(& (proxyaddresses=*{0}*) (objectClass=user))", emailPart);
             using (DirectoryEntry gc = new DirectoryEntry("GC:"))
             {
                 foreach (DirectoryEntry z in gc.Children)
                 {
                     using (DirectoryEntry root = z)
                     {
                         using (DirectorySearcher searcher = new DirectorySearcher(root, customFilter, new String[] { "proxyAddresses", "displayName", "distinguishedName" }))
                         {
                             searcher.ReferralChasing = ReferralChasingOption.All;
                             SearchResultCollection resultCollection = searcher.FindAll();
                             foreach (SearchResult searchResult in resultCollection)
                             {
                                 // Do what I need to do with the search results
                             }
                         }
                     }
                 }
             }

1 个答案:

答案 0 :(得分:1)

MSDN Search Filter Syntax页面会建议:

(&(objectClass=user)(|(proxyAddresses=*{0}*)(displayName=*{0}*)(mail=*{0}*)))

NB:我以displayName为例,因为我不确定您要拨打哪个属性" uniquenames&#34 ;