Быстро перечислить пользователей домена в удаленном доверенном домене

У нас есть ситуация, когда код приложения, работающий на сервере в одном домене, должен перечислить пользователей в другом домене. Назовем домены «ПРОИЗВОДСТВО» и «КОРПОРАТИВНЫЙ» - этот код должен запускаться в ПРОИЗВОДСТВЕ и взаимодействовать с ресурсами ПРОИЗВОДСТВА, но есть особый поток, в котором он должен позволить пользователю выбрать член CORPORATE \ Domain Users ( ну технически более конкретная группа, но это формальность). Все контроллеры домена CORPORATE расположены удаленно от серверов PRODUCTION и доступны через VPN, которая достаточно быстра, но далека от локальной. Мне было трудно найти способ эффективно составить список членов КОРПОРАТИВНОЙ группы.

Я пробовал различные API, в последнее время модуль PowerShell ActiveDirectory, который, как я подозреваю, построен поверх System.DirectoryServices в .NET Framework. Следующая команда запускается на компьютере в КОРПОРАТИВНОМ домене и в КОРПОРАТИВНОЙ ЛВС непосредственно за несколько секунд:

Get-ADGroup "Domain Users" | Get-ADGroupMember

Однако, если я перейду к машине в ПРОИЗВОДСТВЕ, для которой КОРПОРАТИВНЫЙ DC является удаленным, эквивалентная команда:

Get-ADGroup -Server CORPORATEDC "Domain Users" | Get-ADGroupMember

... на выполнение уходит более 10 минут.

В результирующем наборе 1288 элементов.

Есть ли более быстрый способ получить участников группы? По характеристикам производительности создается впечатление, что он настраивает удаленный итератор, а затем выполняет отдельный сетевой цикл приема-передачи (или, возможно, несколько) для каждого отдельного элемента. Есть ли API, который может возвращать результаты за один проход туда и обратно?

В конечном итоге я хочу сделать это из кода C# и просто использовал PowerShell для проверки концепций. Я не против использования собственного P / Invoke или COM API, если он предлагает нужную мне функциональность.

Я подозреваю, что вы правы в том, что командлеты PowerShell используют System.DirectoryServices. Десять минут кажется медленным, но, как вы сказали, вы переходите через VPN в другую сеть. Здесь задействовано множество переменных, большинство из которых мы не смогли приступить к устранению.

Dan Wilson 13.09.2018 20:19

После обновления, после некоторого разговора с администраторами сервера я обнаружил, что Get-ADUser с соответствующей базой поиска и фильтром с подстановочными знаками может извлекать те же записи примерно за 2 секунды. Итак, является возможно! Мне просто нужно определить, что командлет Get-ADUser использует под капотом.

Jonathan Gilbert 13.09.2018 20:44

И ответ на этот вопрос заключается в том, что он использует веб-службы Active Directory, которые, похоже, были изобретены Microsoft для этой цели и не были задокументированы особенно хорошо. Вздох.

Jonathan Gilbert 18.09.2018 00:27
0
3
57
0

Другие вопросы по теме