Запрос глобального списка адресов (GAL) для пользователей в разных доменах
Мне нужно найти всех пользователей, которые содержат определенную текстовую строку в своем имени в глобальном списке адресов Exchange Server. Эта операция будет выполняться из приложения ASP.NET. Обратите внимание, что требуется GAL (не Active Directory), поскольку он содержит пользователей из разных доменов. Это также то, что просил клиент.
Я смотрел на веб-службы Exchange и методы Outlook Web Access. Однако ни один из них не может быть настроен в моей организации, поэтому мне нужно знать, какой вариант является правильным, прежде чем просить инфраструктуру настроить его.
Веб-сервисы Exchange
Я надеялся использовать метод ResolveNames в веб-службах Exchange. Документация для этого заявляет, что:
Сначала выполняется поиск в Active Directory, а затем в папке контактов пользователя.
Кажется, подразумевается, что этот метод будет возвращать пользователей только из текущего домена. Это правильно?
Outlook Web Access
Другой вариант, который я нашел, был GALFind. Это выглядит идеально, но в этой статье говорится, что это не поддерживается. Подтверждено, что больше не доступно в этой статье Technet.
Кто-нибудь может дать совет по этим или любым другим вариантам?
2 ответа
Можно запросить через домены, запустив запрос из корня леса. Вот код, который я использовал в итоге:
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
}
}
Я не эксперт по Exchange, но вы не можете сделать это с помощью Collaboration Data Objects (CDO), хотя это может быть не слишком быстро.