Compartir a través de


Enumeración de grupos en un dominio

Los grupos se pueden colocar en cualquier contenedor o unidad organizativa (OU) en un dominio, así como en la raíz del dominio. Esto significa que los grupos pueden estar en numerosas ubicaciones de la jerarquía de directorios. Por lo tanto, tiene dos opciones para enumerar grupos:

  1. Enumere los grupos incluidos directamente en un contenedor, una unidad organizativa o en la raíz del dominio.

    Enlace explícitamente al objeto contenedor que contiene los grupos que se van a enumerar, establezca un filtro que contenga "grupos" como la clase mediante la propiedad IADsContainer.Filter y use el método IADsContainer::get__NewEnum para enumerar los objetos de grupo.

    Esta técnica enumera los grupos contenidos directamente en un objeto contenedor o unidad organizativa. Si el contenedor contiene otros contenedores que pueden contener potencialmente otros grupos, debe enlazar a esos contenedores y enumerar de forma recursiva los grupos de esos contenedores. Para manipular los objetos de grupo y leer solo propiedades específicas, use la búsqueda en profundidad descrita en la opción 2.

    Dado que la enumeración devuelve punteros a objetos COM ADSI que representan cada objeto de grupo, puede llamar a QueryInterface para obtener iaDs, IADsGroup e IADsPropertyList punteros de interfaz al objeto de grupo; es decir, puede obtener punteros de interfaz a cada objeto de grupo enumerado en un contenedor sin tener que enlazar explícitamente a cada objeto de grupo. Para realizar operaciones en todos los grupos directamente dentro de un contenedor, la enumeración no requiere el enlace a cada grupo para llamar a los métodos IAD o IADsGroup . Para recuperar propiedades específicas de grupos, use IDirectorySearch como se describe en la segunda opción.

    Se produce una excepción a esto cuando se intenta enumerar un grupo que contiene miembros que son entidades de seguridad wellKnown, como Todos, Usuarios autenticados, BATCH, etc. Dado que no se puede enlazar a estos tipos de objetos, no aparecen cuando se enumeran grupos en el ámbito de WinNT, aunque parezca que se enlazan, ya que ciertos métodos de IAD como Class, ADsPath y Name devuelven resultados correctos cuando se invocan en miembros enumerados.

  2. Realice una búsqueda profunda de "objectCategory=group" para buscar todos los grupos de un árbol.

    En primer lugar, enlace al objeto contenedor donde se va a iniciar la búsqueda. Por ejemplo, para buscar todos los grupos de un dominio, enlazar a la raíz del dominio; para buscar todos los grupos del bosque, enlazar a catálogo global y buscar desde la raíz del GC.

    A continuación, use IDirectorySearch para consultar mediante un filtro de búsqueda que contenga (objectCategory=group) y la preferencia de búsqueda de ADS_SCOPE_SUBTREE.

    Nota

    Puede realizar una búsqueda con una preferencia de búsqueda de ADS_SCOPE_ONELEVEL limitar la búsqueda al contenido directo del objeto contenedor al que se ha enlazado.

     

    IDirectorySearch recupera solo los valores de propiedades específicas de grupos. Para recuperar valores, use IDirectorySearch. Para manipular los objetos de grupo devueltos desde una búsqueda, es decir, para usar los métodos IAD o IADsGroup , se enlazan explícitamente a ellos. Para ello, especifique distinguishedName como una de las propiedades que se van a devolver de la búsqueda y use los nombres distintivos devueltos para enlazar a cada grupo devuelto en la búsqueda.

    Solo se recuperan propiedades específicas. No se pueden recuperar todos los atributos sin especificar explícitamente todos los atributos posibles de la clase de grupo.