2011-07-16 26 views
9

Tengo un programa C# 4.0 en funcionamiento que recupera todos los miembros de un grupo de AD específico. En este grupo de AD, hay otros grupos de AD que contienen otros miembros. Necesito que mi programa identifique que es un grupo y recupere los miembros de ese grupo.Grupos anidados de Active Directory

Sé que necesito escribir un programa recursivo, pero esperaba que alguien ya lo haya hecho. Si no, ¿podría alguien decirme el atributo de propiedad AD para identificar que el miembro es un grupo real?

+0

Este enlace puede ser útil: http://en.csharp-online.net/User_Management_with_Active_Directory%E2%80%94Retrieving_tokenGroups_from_ADAM –

Respuesta

-1

Suponiendo que está utilizando la vista LDAP en ActiveDirectory, el atributo que está buscando se llama "objectClass". Un grupo aparece con un objectClass de "groupOfNames", creo; posiblemente "grupo". Alternativamente, simplemente observe si el objeto tiene algún "miembro", independientemente de la clase de objeto, y si lo hace, suponga que se trata de algún tipo de grupo y recurse.

13

Dado que está en .NET 3.5 y superior, debe verificar el espacio de nombres System.DirectoryServices.AccountManagement (S.DS.AM). Leer todo sobre ella aquí:

Básicamente, se puede definir un contexto de dominio y encontrar fácilmente a los usuarios y/o grupos en la EA. Además: el GroupPrincipal tiene un método llamado GetMembers que mostrará una lista de todos los miembros de ese grupo; ¡opcionalmente, lo hará de manera recursiva para usted!

// 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); 
} 

El nuevo S.DS.AM hace que sea muy fácil de jugar con usuarios y grupos de AD!

+0

Gracias por la sugerencia en S.DS.AM. ¡Simplemente me ahorró el dolor de escribir un programa recursivo! –

+0

'GetMembers (true)' tiene una limitación, p. 'Los usuarios del dominio' no se devuelven en absoluto. Para obtenerlos, debes llamar 'GetMembers (false)' recursivamente. –

+0

@WernfriedDomscheit ¿cuál es la otra limitación? –

Cuestiones relacionadas