C# - возврат пользовательских групп безопасности из Active Directory - PullRequest
0 голосов
/ 19 февраля 2020

В настоящее время у меня есть следующий код, который успешно получает все группы безопасности из AD и добавляет их в поле контрольного списка:

try
{
    Logging.LogMessageToFile("Reading Security Groups from AD.");
    PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
    GroupPrincipal qbeGroup = new GroupPrincipal(ctx);
    PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);

    foreach (var found in srch.FindAll())
    {
        lstAdGroups.Items.Clear();
        lstAdGroups.Items.Add(found);     
    }
}
catch (Exception ex)
{
    Logging.LogMessageToFile("Unexpected error reading Security Groups from AD: " + ex.Message);
}

Моя проблема заключается в том, что в настоящее время он запрашивает каждые Безопасность Группа (где в идеале я хотел бы только перечислить только созданные пользователем группы безопасности (например, исключить какие-либо из пользователей или встроенных подразделений). Я не вижу, есть ли какие-либо свойства для групп, чтобы отфильтровать «пользовательские» из коробки. Это вообще возможно?

1 Ответ

1 голос
/ 19 февраля 2020

PrincipalSearcher может фильтровать только на основе атрибутов, представленных в свойствах различных классов Principal. Если вы ищете группы, вы ограничены фильтрацией на основе свойств класса GroupPrincipal.

Что касается вопросов, отфильтровывать объекты в определенных подразделениях - это не то, что вы можете сделать в делать запросы просто потому, что нет атрибута AD, который содержит OU, по которому вам разрешено фильтровать. Таким образом, есть два способа сделать это:

  1. Делайте то, что вы уже делаете, но в своем l oop посмотрите на свойство DistinguishedName результата. Если это в OU, которое вам не нравится, тогда просто continue;.

  2. Вы можете использовать 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]);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...