我需要针对Exchange Server全局地址列表搜索名称中包含特定文本字符串的所有用户。此操作将从ASP.NET应用程序执行。请注意,GAL是必需的(不是Active Directory),因为它包含跨域的用户。这也是客户要求的。
我一直在研究Exchange Web服务和Outlook Web Access方法。但是,我的组织中既没有配置也没有,所以在要求基础设施配置之前,我需要知道哪个选项是正确的。
Exchange Web服务
我希望在Exchange Web服务中使用ResolveNames方法。它的文档说明:
首先搜索Active Directory,然后搜索用户的联系人文件夹。
似乎暗示此方法仅返回当前域中的用户。这是对的吗?
Outlook Web Access
我发现的另一个选择是GALFind。这看起来很完美,但this article声明它不受支持。此Technet文章已确认不再提供此内容。
有人可以就这些或任何其他选择提出建议吗?
答案 0 :(得分:3)
可以通过从林根开始查询来跨域查询。这是我最终使用的代码:
string filter = "(&(objectCategory=person)(objectClass=user)(name=*" + search + "*))";
var rootEntry = new DirectoryEntry("GC:");
foreach (DirectoryEntry entry in rootEntry.Children)
{
DirectoryEntry forestEntry = entry;
DirectorySearcher searcher = new DirectorySearcher
{
SearchRoot = forestEntry,
Filter = filter,
Sort =
{
Direction = SortDirection.Ascending,
PropertyName = "cn"
}
};
searcher.PropertiesToLoad.AddRange(ADProperties.Values.ToArray());
SearchResultCollection results = searcher.FindAll();
foreach (SearchResult result in results)
{
DirectoryEntry foundEntry = result.GetDirectoryEntry();
// Do something
}
}
答案 1 :(得分:0)
我不是Exchange专家,但您不能使用Collaboration Data Objects(CDO)执行此操作,尽管它可能不是too swift。