Énumération de groupes dans un domaine
Les groupes peuvent être placés dans n’importe quel conteneur ou unité d’organisation (UO) d’un domaine, ainsi que dans la racine du domaine. Cela signifie que les groupes peuvent se trouver à de nombreux emplacements dans la hiérarchie des répertoires. Par conséquent, vous avez deux choix pour énumérer les groupes :
Énumérez les groupes directement contenus dans un conteneur, une unité d’organisation ou à la racine du domaine.
Liez explicitement à l’objet conteneur qui contient les groupes à énumérer, définissez un filtre qui contient « groups » comme classe à l’aide de la propriété IADsContainer.Filter et utilisez la méthode IADsContainer::get__NewEnum pour énumérer les objets de groupe.
Cette technique énumère les groupes contenus directement dans un conteneur ou un objet d’unité d’organisation. Si le conteneur contient d’autres conteneurs qui peuvent potentiellement contenir d’autres groupes, vous devez les lier à ces conteneurs et énumérer de manière récursive les groupes sur ces conteneurs. Pour manipuler les objets de groupe et lire uniquement des propriétés spécifiques, utilisez la recherche approfondie décrite dans l’option 2.
Étant donné que l’énumération retourne des pointeurs vers des objets COM ADSI représentant chaque objet de groupe, vous pouvez appeler QueryInterface pour obtenir des IAD, IADsGroup et des pointeurs d’interface IADsPropertyList vers l’objet de groupe ; Autrement dit, vous pouvez obtenir des pointeurs d’interface vers chaque objet de groupe énuméré dans un conteneur sans avoir à lier explicitement à chaque objet de groupe. Pour effectuer des opérations sur tous les groupes directement dans un conteneur, l’énumération ne nécessite pas de liaison à chaque groupe afin d’appeler des méthodes IAD ou IADsGroup . Pour récupérer des propriétés spécifiques à partir de groupes, utilisez IDirectorySearch comme décrit dans la deuxième option.
Une exception à cela se produit lorsque vous tentez d’énumérer un groupe qui contient des membres qui sont des principaux de sécurité wellKnown, tels que Tout le monde, utilisateurs authentifiés, BATCH, etc. Étant donné que vous ne pouvez pas lier à ces types d’objets, ils ne sont pas répertoriés lorsque vous énumérez des groupes dans l’étendue WinNT, même si cela peut sembler lié, car certaines méthodes IAD telles que Class, ADsPath et Name retournent des résultats corrects lorsqu’elles sont appelées sur les membres énumérés.
Effectuez une recherche approfondie pour « objectCategory=group » pour rechercher tous les groupes d’une arborescence.
Tout d’abord, liez à l’objet conteneur où commencer la recherche. Par exemple, pour rechercher tous les groupes d’un domaine, liez à la racine du domaine ; pour rechercher tous les groupes de la forêt, liez au catalogue global et recherchez à partir de la racine du GC.
Ensuite, utilisez IDirectorySearch pour interroger à l’aide d’un filtre de recherche qui contient (objectCategory=group) et la préférence de recherche de ADS_SCOPE_SUBTREE.
Notes
Vous pouvez effectuer une recherche avec une préférence de recherche de ADS_SCOPE_ONELEVEL pour limiter la recherche au contenu direct de l’objet conteneur auquel vous êtes lié.
IDirectorySearch récupère uniquement les valeurs de propriétés spécifiques à partir de groupes. Pour récupérer des valeurs, utilisez IDirectorySearch. Pour manipuler les objets de groupe retournés à partir d’une recherche, c’est-à-dire utiliser des méthodes IAD ou IADsGroup , liez explicitement à ces objets. Pour ce faire, spécifiez distinguishedName comme l’une des propriétés à retourner à partir de la recherche et utilisez les noms uniques retournés pour lier à chaque groupe retourné dans la recherche.
Seules des propriétés spécifiques sont récupérées. Vous ne pouvez pas récupérer tous les attributs sans spécifier explicitement tous les attributs possibles de la classe de groupe.