使用目录搜索器搜索不同名称、邮件和代理的过滤器

本文关键字:代理 过滤器 搜索器 搜索 | 更新日期: 2023-09-27 18:18:47

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

现在我不确定的是(以及我的问题是什么)我怎么能扩展过滤器,使我所有的条目,其中代理地址,唯一名称或主smtp地址有测试作为其值的一部分(因此,所有3件事在同一时间与他们被视为"或"过滤,而不是一个和)?

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
                             }
                         }
                     }
                 }
             }

使用目录搜索器搜索不同名称、邮件和代理的过滤器

MSDN搜索过滤器语法页面建议:

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

NB:我使用displayName作为一个例子,因为我不确定哪个属性你调用"唯一名称"