Вложенные группы Active Directory
У меня работает программа на C# 4.0, которая извлекает всех участников для определенной группы AD. В этой группе AD находятся другие группы AD, содержащие других участников. Мне нужна моя программа, чтобы идентифицировать, что это группа, и получить членов этой группы.
Я знаю, что мне нужно написать рекурсивную программу, но я надеялся, что кто-то там уже мог это сделать. Если нет, то может ли кто-нибудь сказать мне атрибут свойства AD, чтобы определить, что этот член действительно является группой?
2 ответа
Поскольку вы используете.NET 3.5 и выше, вы должны проверить System.DirectoryServices.AccountManagement
(S.DS.AM) пространство имен. Прочтите все об этом здесь:
- Управление принципами безопасности каталогов в.NET Framework 3.5
- Документы MSDN на System.DirectoryServices.AccountManagement
По сути, вы можете определить контекст домена и легко найти пользователей и / или группы в AD. Так же GroupPrincipal
имеет метод, называемый GetMembers
который перечислит всех членов этой группы - по желанию, это будет делать это рекурсивно для вас!
// set up domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);
// find the group you're interested in
GroupPrincipal myGroup = GroupPrincipal.FindByIdentity(ctx, "SomeGroup");
// if you found it - get its members
if (myGroup != null)
{
// if your call the GetMembers, you can optionally specify a "Recursive" flag - done here
var allMembers = myGroup.GetMembers(true);
}
Новый S.DS.AM позволяет очень легко играть с пользователями и группами в AD!
Предполагая, что вы используете представление LDAP в ActiveDirectory, атрибут, который вы ищете, называется "objectClass". Я полагаю, что группа обнаруживается с объектным классом "groupOfNames"; возможно "группа". В качестве альтернативы, просто посмотрите, есть ли у объекта какие-либо "члены", независимо от класса объекта, и если это так, предположите, что это своего рода группа и рекурсор.