PrincipalSearcher
может фильтровать только на основе атрибутов, представленных в свойствах различных классов Principal
. Если вы ищете группы, вы ограничены фильтрацией на основе свойств класса GroupPrincipal
.
Что касается вопросов, отфильтровывать объекты в определенных подразделениях - это не то, что вы можете сделать в делать запросы просто потому, что нет атрибута AD, который содержит OU, по которому вам разрешено фильтровать. Таким образом, есть два способа сделать это:
Делайте то, что вы уже делаете, но в своем l oop посмотрите на свойство DistinguishedName
результата. Если это в OU, которое вам не нравится, тогда просто continue;
.
Вы можете использовать DirectorySearcher
напрямую (это то, что использует PrincipalSearcher
в любом случае) и фильтруйте по атрибуту isCriticalSystemObject
. Это отфильтровывает встроенные объекты, такие как группы Domain Admins
и Users
и т. Д. c.
. Вот простой пример использования DirectorySearcher
, который просто выводит имя каждой группы:
var searcher = new DirectorySearcher("(&(objectClass=group)(!isCriticalSystemObject=TRUE))");
using (var results = searcher.FindAll()) {
foreach (SearchResult result in results) {
Console.WriteLine(result.Properties["cn"][0]);
}
}