使用目录搜索器搜索不同名称、邮件和代理的过滤器
本文关键字:代理 过滤器 搜索器 搜索 | 更新日期: 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
作为一个例子,因为我不确定哪个属性你调用"唯一名称"