Запрос глобального списка адресов (GAL) для пользователей в разных доменах

StackOverflow https://stackoverflow.com/questions/1260080

Вопрос

Мне нужно найти всех пользователей, содержащих определенную текстовую строку в своем имени, в глобальном списке адресов сервера Exchange.Эта операция будет выполнена из приложения ASP.NET.Обратите внимание, что требуется глобальный список адресов (а не Active Directory), поскольку он содержит пользователей из разных доменов.Это также то, что просил клиент.

Я рассматривал методы веб-служб Exchange и Outlook Web Access.Однако ни один из них не может быть настроен в моей организации, поэтому мне нужно знать, какой вариант является правильным, прежде чем просить инфраструктуру настроить его.

Веб-службы обмена

Я надеялся использовать Разрешить имена метод в веб-службах Exchange.В документации к нему указано, что:

Сначала выполняется поиск в Active Directory, а затем в папке контактов пользователя.

Похоже, подразумевается, что этот метод вернет только пользователей из текущего домена.Это верно?

Веб-доступ к Outlook

Другой вариант, который я нашел, — GALFind.Это выглядит идеально, но Эта статья заявил, что это не поддерживается.Подтверждено, что он больше не доступен в этом Технет статья.

Кто-нибудь может дать совет по этим или другим вариантам?

Это было полезно?

Решение

Можно выполнять запросы между доменами, начиная запрос с корня леса.Вот код, который я в итоге использовал:

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, но не могли бы вы сделать это с помощью Объекты данных для совместной работы (CDO), хотя это может быть и не так слишком быстрый.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top