2010-06-03 2 views
2

J'essaie d'obtenir une liste des groupes qui sont dans un groupe AD en utilisant .NET. Par exemple, j'ai un groupe appelé TestGroup et dans ce groupe j'ai le groupe DomainAdministrators. En utilisant le code ci-dessous, je peux obtenir tous les utilisateurs, y compris ceux du groupe DomainAdministrators mais pas le groupe lui-même.Comment obtenir une liste de groupes dans un groupe Active Directory

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(); 

Au lieu de GetMembers J'ai essayé GetGroups mais cela ne retourne rien. Comment puis-je retourner les groupes dans le groupe?

+2

Regardez les valeurs de 'GetMembers'. 'GetMembers' renvoie les objets AD qui font partie du groupe. 'GetGroups' est le groupe que l'objet AD actuel est ** membre de **. –

Répondre

3

Apparemment, si vous n'exécutez pas GetMembers de manière récursive (pass false), vous obtenez des utilisateurs et des groupes et vous avez juste besoin de filtrer par 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(); 
Questions connexes