Active Directory/C#: получить пользователей в одном домене с несколькими подразделениями?

В настоящее время я пытаюсь вывести всех пользователей в моей организации из группы безопасности под названием Y в группу безопасности под названием X. Я попробовал несколько различных подходов к этому и начинаю доводить это до конца. В настоящее время я вернулся к методу DirectoryEntry, пытаясь получить своих пользователей, но ранее пытался использовать метод PrincipalContext. Метод PrincipalContext очень хорошо работает для получения моих серверов, но они являются членами отдельных групп верхнего уровня. Группа Y вложена в группу X, которая сгруппирована следующим образом: A -> B -> C -> D -> X -> Y. Еще одна возможная проблема, которую я вижу, состоит в том, что свойство extendedvedName имеет подразделения в неорганизованном виде. поэтому я чувствую, что порядок не имеет значения, когда дело доходит до нашей эры? Но я бы предположил, что при запросе с подстановочными знаками порядок имеет значение

Свойство Отличительное имя структурировано следующим образом (псевдо для сохранения ввода): CN= Имя пользователя, OU =Y, D, X, C, B, A, DC =a, b, c, net

Ниже мой текущий код для пользователей:

        private static void GetUsers() {
        int x = 0;

        DirectoryEntry dm = new DirectoryEntry("LDAP://a.b.c.net");
        DirectorySearcher searcher = new DirectorySearcher(dm);

        searcher.Filter = "(&(objectClass=user)(distinguishedName=*OU=Y*OU=X*))";
        searcher.PropertiesToLoad.AddRange(new string[4] {"name", "samAccountName", "userPrincipalName", "mail"});

        foreach (SearchResult result in searcher.FindAll()) {
            Console.WriteLine(string.Format("Name: {0}\nSAM: {1}\nPrincipal: {2}\nMail: {3}",
                                            result.Properties["name"],
                                            result.Properties["samAccountName"],
                                            result.Properties["userPrincipalName"],
                                            result.Properties["mail"]));
            x++;
        }

        Console.WriteLine("User Count: " + x);
    }

Я предполагаю, что это проблема с моим фильтром, так как код выполняется полностью и печатает число пользователей, равное нулю. Мне трудно понять, как работает подстановочный знак, и я нашел очень мало информации о том, как вывести пользователей из подгрупп и сузить круг вопросов. Я работаю в очень, очень большой организации, поэтому простое извлечение всех пользователей в домене не только займет много времени, но и вернет десятки тысяч записей.

Пожалуйста помоги?!?!?!?!? -Спасибо, Джейми

1 ответ

Решение

Поэтому после нескольких часов исследований и безуспешных попыток переполнения стека я понял, что это комбинация моего домена и фильтра. Мне пришлось добавить список OU в конец DNS в указанном домене. Кроме того, фильтр нужно было сузить, и мне пришлось удалить свойство Отличительное имя и просто отфильтровать свойства name и sn.

using (DirectoryEntry entry = new DirectoryEntry("LDAP://a.b.c.net/OU=Y,OU=D,OU=X,OU=C,OU=B,OU=A,DC=a,DC=b,DC=c,DC=net"))
mySearcher.Filter = ("(&(objectClass=user)(&(|(name=*1*)(name=*2*))(!(sn=*.*))))");
Другие вопросы по тегам