Associazione al catalogo globale
Il Catalogo globale è uno spazio dei nomi che contiene i dati della directory per tutti i domini in una foresta. Il Catalogo globale contiene una replica parziale di ogni directory di dominio. Contiene una voce per ogni oggetto nella foresta dell'organizzazione, ma non contiene tutte le proprietà di ogni oggetto. Contiene invece solo le proprietà specificate per l'inclusione nel Catalogo globale.
Il Catalogo globale viene archiviato in server specifici in tutta l'organizzazione. Solo i controller di dominio possono fungere da server di catalogo globale. Amministrazione istrators indicano se un determinato controller di dominio contiene un catalogo globale usando Active Directory Sites and Services Manager.
Per eseguire l'associazione al Catalogo globale con ADSI, usare il moniker "GC:".
Esistono due modi per eseguire l'associazione al Catalogo globale per eseguire una ricerca in una foresta:
- Eseguire il binding all'oggetto radice dell'organizzazione per eseguire la ricerca in tutti i domini nella foresta.
- Eseguire il binding a un oggetto specifico per eseguire ricerche nell'oggetto e nei relativi elementi figlio. Ad esempio, se si esegue l'associazione a un dominio con due domini sotto di esso in un albero di dominio nella foresta, è possibile eseguire ricerche in questi tre domini. Tenere presente che il nome distinto per l'oggetto a cui eseguire l'associazione è esattamente uguale al nome distinto usato per l'associazione allo spazio dei nomi "LDAP:". Tenere presente che "LDAP:" è una replica completa di un singolo dominio e che "GC:" è una replica parziale di tutti i domini nella foresta.
Come per il moniker "LDAP:", è possibile usare l'associazione serverless o l'associazione a un server catalogo globale specifico. Se si esegue la ricerca nella foresta corrente, usare l'associazione serverless. Tuttavia, se si esegue una ricerca in un'altra foresta, specificare un nome di dominio o un server del catalogo globale a cui eseguire l'associazione, ad esempio illustrato negli esempi seguenti.
Eseguire l'associazione usando il nome di dominio:
GC://fabrikam.com
Eseguire l'associazione usando il nome del server:
GC://servername
È anche possibile eseguire il binding a un oggetto specifico all'interno del Catalogo globale. Per eseguire l'associazione all'oggetto sales nel dominio fabrikam, usare il formato seguente.
GC://fabrikam.com/DC=sales,DC=fabrikam,DC=com
In alternativa, per eseguire l'associazione all'oggetto sales nel server, usare il formato seguente.
GC://servername.fabrikam.com/DC=sales,DC=fabrikam,DC=com
Per eseguire ricerche nell'intera foresta
- Eseguire l'associazione alla radice dello spazio dei nomi catalogo globale.
- Enumerare il contenitore Catalogo globale. Il contenitore Catalogo globale contiene un singolo oggetto che è possibile usare per eseguire ricerche nell'intera foresta.
- Usare l'oggetto nel contenitore per eseguire la ricerca. In C/C++ chiamare QueryInterface per ottenere un puntatore IDirectorySearch sull'oggetto in modo da poter usare l'interfaccia IDirectorySearch per eseguire la ricerca. In Visual Basic usare l'oggetto restituito dall'enumerazione nella query ADO.
Per enumerare i server del catalogo globale in un sito, eseguire una ricerca nel sottoalbero LDAP "cn=<yoursite,cn>=sites,DN< della configurazioneNamingContext>", usando la stringa di filtro seguente.
(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))
Questo filtro usa l'operatore della regola di corrispondenza LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) per trovare oggetti nTDSDSA con il bit di ordine basso impostato nella maschera di bit dell'attributo options . Il bit di ordine basso, che corrisponde alla costante NTDSDSA_OPT_IS_GC definita in Ntdsapi.h, identifica l'oggetto nTDSDSA di un server di catalogo globale. Per altre informazioni sulle regole di corrispondenza, vedere sintassi del filtro di ricerca.
L'elemento padre dell'oggetto nTDSDSA è l'oggetto server e la proprietà dNSHostName dell'oggetto server è il nome DNS del server catalogo globale.
Non è possibile usare costanti #define, ad esempio NTDSDSA_OPT_IS_GC e LDAP_MATCHING_RULE_BIT_AND direttamente in una stringa di filtro di ricerca. Tuttavia, è possibile usare queste costanti come argomenti per una funzione, ad esempio swprintf_s per inserire i valori costanti in una stringa di filtro.
Il catalogo globale non rappresenta l'intera struttura ad albero della foresta. Ad esempio, si potrebbe prevedere che l'esempio di codice seguente enumererebbe tutti i domini nella foresta e tutti gli oggetti figlio di ogni dominio. In realtà, ciò che effettivamente fa è enumerare tutti i domini nella foresta, ma nessuno degli oggetti di dominio enumerati contiene elementi figlio. Si tratta di una limitazione del catalogo globale.
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
Per risolvere il problema, è necessario eseguire l'associazione a ogni oggetto di dominio e quindi enumerare gli oggetti figlio di ogni dominio. La tecnica appropriata è illustrata nell'esempio di codice seguente.
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
Per altre informazioni ed esempi di codice che illustrano come eseguire ricerche in un'intera foresta, vedere Codice di esempio per la ricerca di una foresta.