Не получить все группы при поиске по OU в Active Directory
Я пытаюсь получить все имена групп в Active Directory. Группа должна быть отфильтрована по имени подразделения. Существует также возможность получить все группы без фильтрации OU. Выборка всех групп дает более 20 групп. Но когда я пытаюсь получить группы по имени подразделения, немногие из групп показывают (6 групп) из разных подразделений.
Я пробовал DirectorySearcher с фильтром, но не смог получить все группы.
DirectoryEntry root = null;
if (ou == "")
{
// This is giving all groups
root = new DirectoryEntry("LDAP://RootDSE");
root = new DirectoryEntry("LDAP://" + root.Properties["defaultNamingContext"][0]);
}
else
{
// When passed 1 by 1 OU name, few of the groups are showing
string cName = getExactDomainName(domain);
root = new DirectoryEntry("LDAP://OU=" + ou + "," + cName);
}
Нужен запрос фильтра поиска, чтобы дать всем группам имя OU.
РЕДАКТИРОВАТЬ: 1. Я выбираю все подразделения в определенном домене и показываю их в окне контрольного списка. 2. Пользователь может проверить одну или несколько групп из поля контрольного списка. В зависимости от проверенных групп и выбранного OU (на 1-м шаге) будут отображаться пользователи. Фильтр выглядит так:
var search = new DirectorySearcher(new DirectoryEntry())
{
search.Filter = "(&(objectCategory=user)(memberOf=cn=" + groupName + ",ou=" + OUName + ",dc=dev,dc=local))";
};
Теперь проблема в том, что когда на первом этапе не выбрано OU, появляются 20 групп. Но, когда OU выбран 1 на 1, общее количество групп не 20. Я думаю, я возиться с фильтром запроса. Мне просто нужна опция, когда пользователь выберет OU, тогда все группы будут показаны пользователю. Пользователь теперь проверит группы, и все пользователи в этой группе (группах) и OU будут выбраны.
1 ответ
Если я вас правильно понимаю, проблема в том, что если вы будете искать все группы в домене, вы получите один номер. Если вы будете искать группы в каждом подразделении отдельно, вы получите меньшее число.
Вероятно, причина в том, что не все группы входят в подразделение. Вы либо:
- Есть группы в корне домена (например,
CN=Group1,dc=dev,dc=local
), или же - Есть группы в контейнерах (
objectClass=container
), которые похожи на OUs, но нет. Действительно, единственная разница между подразделениями и контейнерами заключается в том, что к подразделениям могут применяться групповые политики, а к контейнерам - нет. Когда вы собираете все названия подразделений, если вы действительно ищете только подразделения (objectClass=organizationalUnit
), тогда вы пропустите контейнеры и группы внутри. Новый домен поставляется с несколькими контейнерами по умолчанию, такими какUsers
,Computers
,System
, так далее.