Я использую System.DirectoryServices.AccountManagement API для извлечения списка групп из AD. Все эти группы начинаются с одного и того же префикса, поэтому их легко найти по префиксу и подстановочному знаку. Что я также хотел бы сделать, так это просто получить группы, которые изменились с тех пор, как я последний раз проверял. Я создал подкласс GroupPrincipal, чтобы включить атрибут whenChanged, и я использую его в настоящее время, после получения полного списка групп, для фильтрации списка. Я хотел бы знать, возможно ли выполнить AdvancedFilterSearch на GroupPrincipal? Я понимаю, что у GroupPrincipal нет свойства AdvancedFilterSearch. Мне интересно, если вы добавите один в подкласс, будет ли PrincipalSearcher его использовать? Если да, то пример был бы хорош.

Благодарность,

Крис Маккиннон

4
user612247 15 Апр 2011 в 19:17
1
Привет, просто интересно, чего вы хотите достичь с помощью AdvancedFilterSearch? Я спрашиваю об этом, так как может быть какая-то другая стратегия для решения вашей проблемы, не используя AdvancedFilterSearch
 – 
Raymund
27 Апр 2011 в 02:55

1 ответ

Краткий ответ на получение только тех групп, которые изменились с момента последней проверки, заключается в том, что это (легко) невозможно.

Каждый объект в AD имеет связанный с ним атрибут порядкового номера обновления. Когда группа меняет свой номер USN, он меняется. Но не всегда. Если вы добавляете/удаляете участников в группу, USN не меняется. Он меняется только при изменении имени группы или других простых свойств. Кроме того, номер USN уникален для одного контроллера домена. Поэтому вы должны убедиться, что вы всегда подключаетесь к одному и тому же серверу.

Вы можете подписаться на изменения объектов AD и получать уведомления об их изменении, но это не масштабируется.

В моем проекте я каждый раз запрашивал все группы. Это не так плохо, как кажется, поскольку API действительно хорошо разбивает набор результатов на страницы, и при просмотре ресурсов он не очень интенсивен.

0
Cosmin Onea 15 Янв 2012 в 18:39