我正在尝试使用.NET获取AD组中的组列表。
例如,我有一个名为TestGroup的组,在该组中我有组DomainAdministrators。
使用下面的代码,我可以获得所有用户,包括来自DomainAdministrators组的用户,但不包括组本身。
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DomainName");
GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, "TestGroup");
ArrayList members = new ArrayList();
if (grp != null)
{
foreach (Principal p in grp.GetMembers(true))
{
members.Add(p.Name)
}
}
grp.Dispose();
ctx.Dispose();
我没有使用GetMembers,而是尝试了GetGroups,但这并没有返回任何内容。如何归还组中的组?
答案 0 :(得分:4)
如果你没有递归执行GetMembers(传入false),你会得到用户和组,只需要按StructuralObjectClass进行过滤。
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DomainName");
GroupPrincipal grp = GroupPrincipal.FindByIdentity(ctx, IdentityType.Name, "TestGroup");
ArrayList users = new ArrayList();
ArrayList groups = new ArrayList();
if (grp != null)
{
foreach (Principal p in grp.GetMembers(false)) //set to false
{
if (p.StructuralObjectClass == "user")
users.Add(p.Name);
else if (p.StructuralObjectClass == "group")
groups.Add(p.Name);
}
}
grp.Dispose();
ctx.Dispose();