我目前正在实施一个方法,该方法返回活动目录中找到的所有电子邮件地址(搜索参数是邮件地址的第一部分)。在方法的第一次迭代中,我使用了互操作方法,但它们花了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
}
}
}
}
}
答案 0 :(得分:1)
MSDN Search Filter Syntax页面会建议:
(&(objectClass=user)(|(proxyAddresses=*{0}*)(displayName=*{0}*)(mail=*{0}*)))
NB:我以displayName
为例,因为我不确定您要拨打哪个属性" uniquenames&#34 ;