.NET 3.5 - System.DirectoryServices.AccountManagement - AdvancedSearchFilter для группы? - PullRequest
4 голосов
/ 15 апреля 2011

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

Спасибо,

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

1 Ответ

0 голосов
/ 15 января 2012

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

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

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

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

...