Liaison au catalogue global
Le catalogue global est un espace de noms qui contient des données d’annuaire pour tous les domaines d’une forêt. Le catalogue global contient une réplica partielle de chaque répertoire de domaine. Il contient une entrée pour chaque objet de la forêt d’entreprise, mais ne contient pas toutes les propriétés de chaque objet. Au lieu de cela, il contient uniquement les propriétés spécifiées pour l’inclusion dans le catalogue global.
Le catalogue global est stocké sur des serveurs spécifiques au sein de l’entreprise. Seuls les contrôleurs de domaine peuvent servir de serveurs de catalogue global. Les administrateurs indiquent si un contrôleur de domaine donné détient un catalogue global à l’aide du Gestionnaire de sites et de services Active Directory.
Pour lier au catalogue global avec ADSI, utilisez le moniker « GC: ».
Il existe deux façons de lier au catalogue global pour effectuer une recherche dans une forêt :
- Liez à l’objet racine d’entreprise pour effectuer une recherche dans tous les domaines de la forêt.
- Lier à un objet spécifique pour rechercher cet objet et ses enfants. Par exemple, si vous liez à un domaine qui a deux domaines sous celui-ci dans une arborescence de domaines dans la forêt, vous pouvez effectuer une recherche dans ces trois domaines. N’oubliez pas que le nom unique de l’objet à lier est exactement le même que le nom unique utilisé pour la liaison à l’espace de noms « LDAP : ». Rappelez-vous que « LDAP : » est une réplica complète d’un seul domaine et que « GC: » est une réplica partielle de tous les domaines de la forêt.
Comme avec le moniker « LDAP: », vous pouvez utiliser une liaison serverless ou une liaison à un serveur de catalogue global spécifique. Si vous effectuez une recherche dans la forêt actuelle, utilisez une liaison serverless. Toutefois, si vous effectuez une recherche dans une autre forêt, spécifiez un nom de domaine ou un serveur de catalogue global à lier, comme illustré dans les exemples suivants.
Lier à l’aide du nom de domaine :
GC://fabrikam.com
Lier à l’aide du nom du serveur :
GC://servername
Vous pouvez également établir une liaison à un objet spécifique dans le catalogue global. Pour établir une liaison à l’objet sales dans le domaine fabrikam, utilisez le format suivant.
GC://fabrikam.com/DC=sales,DC=fabrikam,DC=com
Ou, pour établir une liaison à l’objet sales sur le serveur, utilisez le format suivant.
GC://servername.fabrikam.com/DC=sales,DC=fabrikam,DC=com
Pour rechercher l’ensemble de la forêt
- Lier à la racine de l’espace de noms Catalogue global.
- Énumérez le conteneur Catalogue global. Le conteneur Catalogue global contient un seul objet que vous pouvez utiliser pour rechercher l’ensemble de la forêt.
- Utilisez l’objet dans le conteneur pour effectuer la recherche. En C/C++, appelez QueryInterface pour obtenir un pointeur IDirectorySearch sur l’objet afin que vous puissiez utiliser l’interface IDirectorySearch pour effectuer la recherche. En Visual Basic, utilisez l’objet retourné par l’énumération dans votre requête ADO.
Pour énumérer les serveurs de catalogue global dans un site, effectuez une recherche de sous-arborescence LDAP de « cn=<yoursite,cn>=sites,DN< de la configurationNamingContext> », à l’aide de la chaîne de filtre suivante.
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Ce filtre utilise l’opérateur de règle de correspondance LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) pour rechercher les objets nTDSDSA dont le bit d’ordre inférieur est défini dans le masque de bits de l’attribut options . Le bit d’ordre inférieur, qui correspond à la constante NTDSDSA_OPT_IS_GC définie dans Ntdsapi.h, identifie l’objet nTDSDSA d’un serveur de catalogue global. Pour plus d’informations sur les règles de correspondance, consultez Syntaxe du filtre de recherche.
Le parent de l’objet nTDSDSA est l’objet serveur, et la propriété dNSHostName de l’objet serveur est le nom DNS du serveur catalogue global.
Vous ne pouvez pas utiliser de constantes #define telles que NTDSDSA_OPT_IS_GC et LDAP_MATCHING_RULE_BIT_AND directement dans une chaîne de filtre de recherche. Toutefois, vous pouvez utiliser ces constantes comme arguments pour une fonction telle que swprintf_s pour insérer les valeurs constantes dans une chaîne de filtre.
Le catalogue global ne représente pas l’intégralité de l’arborescence de forêt. Par exemple, vous pouvez vous attendre à ce que l’exemple de code suivant énumère tous les domaines de la forêt et tous les objets enfants de chaque domaine. En réalité, elle énumère en fait tous les domaines de la forêt, mais aucun des objets de domaine énumérés ne contient d’enfants. Il s’agit d’une limitation du catalogue global.
Dim oGC As IADs
Dim oDomain As IADs
Dim oChild As IADs
Set oGC = GetObject("GC:")
For Each oDomain In oGC
' Print the name of the domain.
Debug.Print oDomain.Name
' Enumerate the child objects of the domain.
For Each oChild In oDomain
Debug.Print oChild.Name
Next
Next
Pour corriger ce problème, il est nécessaire de lier à chaque objet de domaine, puis d’énumérer les objets enfants de chaque domaine. La technique appropriée est illustrée dans l’exemple de code suivant.
Dim oGC As IADs
Dim oDomainEnum As IADs
Dim oDomainBind As IADs
Dim oChild As IADs
Set oGC = GetObject("GC:")
For Each oDomainEnum In oGC
' Print the name of the domain.
Debug.Print oDomainEnum.Name
' Bind to the domain.
Set oDomainBind = GetObject("LDAP://" + oDomainEnum.Name)
' Enumerate the child objects of the domain.
For Each oChild In oDomainBind
Debug.Print oChild.Name
Next
Next
Pour obtenir plus d’informations et des exemples de code qui montrent comment effectuer une recherche dans une forêt entière, consultez Exemple de code pour la recherche d’une forêt.