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=*.*))))");