Работая над приложением, которое запрашивает в AD информацию о пользователях, я продолжал получать контроллеры домена как часть своих результатов.
Использование C # DirectorySearcher
со следующим фильтром:
"(objectClass=User)"
Покопавшись, я заметил, что для наших контроллеров домена атрибут objectClass имеет значение:
top; person; organizationalPerson; user; computer
Это показалось мне странным. Однако у меня нет системы отсчета, и я не смог найти какую-либо конкретную документацию по этому поводу.
Может кто-нибудь посоветовать, правильно ли это выглядит, если нет, то что это должно быть. Также приветствуются любые документы / передовые методы / стандарты, касающиеся этого.
Технически вам нужно фильтровать по 2 значениям. Первый, objectCategory=Computer
потому что контроллеры домена - это компьютер, как и любой другой, и, во-вторых, вам нужно фильтровать флаги на userAccountControl атрибут ищет серверы с ADS_UF_SERVER_TRUST_ACCOUNT
флаг.
ADS_UF_SERVER_TRUST_ACCOUNT
0x1000 или 8192 в десятичной системе. Делая binary and
для атрибутов активного каталога выполняется с помощью 1.2.840.113556.1.4.803
оператор. Итак, ваш запрос в конечном итоге будет выглядеть так:
(&(objectCategory=computer)(userAccountControl:1.2.840.113556.1.4.803:=8192))
Другой запрос для объектов контроллера домена, который может работать лучше, - (& (objectCategory = computer) (primaryGroupId = 516)). 521 для контроллеров домена только для чтения. Или для обоих: (& (objectCategory = компьютер) (| (primaryGroupId = 516) (primaryGroupId = 521)))
Вероятно, это не очень заметно в небольших доменах, однако в доменах с большим количеством компьютерных объектов запросы userAccountControl: могут занять очень много времени.
Если вы выполняете запрос для объекта сервера, который отображается на сайтах и службах Active Directory, это будет: (objectCategory = server), а в основе должен быть контекст именования конфигурации.