Привязка к глобальному каталогу

Глобальный каталог — это пространство имен, содержащее данные каталога для всех доменов в лесу. Глобальный каталог содержит частичный реплика каждого каталога домена. Он содержит запись для каждого объекта в корпоративном лесу, но не содержит все свойства каждого объекта. Вместо этого он содержит только свойства, указанные для включения в глобальный каталог.

Глобальный каталог хранится на определенных серверах в пределах предприятия. Только контроллеры домена могут служить серверами глобального каталога. Администратор istrator указывает, содержит ли данный контроллер домена глобальный каталог с помощью Диспетчера сайтов и служб Active Directory.

Чтобы привязать к глобальному каталогу с помощью ADSI, используйте моникер "GC:".

Существует два способа привязки к глобальному каталогу для выполнения поиска в лесу:

  • Привязка к корневому объекту предприятия для поиска по всем доменам в лесу.
  • Привязка к конкретному объекту для поиска этого объекта и его дочерних объектов. Например, если вы привязываетесь к домену с двумя доменами под ним в дереве домена в лесу, можно выполнить поиск по трем доменам. Помните, что различающееся имя объекта, к которому необходимо привязаться, точно совпадает с различающимся именем, используемым для привязки к пространству имен LDAP:. Помните, что "LDAP:" является полной реплика одного домена и что "GC:" является частичным реплика всех доменов в лесу.

Как и в случае с моникером LDAP:, можно использовать бессерверную привязку или привязать к конкретному серверу глобального каталога. При поиске в текущем лесу используйте бессерверную привязку. Однако при поиске в другом лесу укажите доменное имя или сервер глобального каталога для привязки, например в следующих примерах.

Привязка с помощью доменного имени:

GC://fabrikam.com

Привязка с помощью имени сервера:

GC://servername

Вы также можете привязать к определенному объекту в глобальном каталоге. Чтобы выполнить привязку к объекту продаж в домене fabrikam, используйте следующий формат.

GC://fabrikam.com/DC=sales,DC=fabrikam,DC=com

Кроме того, чтобы выполнить привязку к объекту продаж на сервере, используйте следующий формат.

GC://servername.fabrikam.com/DC=sales,DC=fabrikam,DC=com

Поиск всего леса

  1. Привязка к корневому пространству имен глобального каталога.
  2. Перечислите контейнер глобального каталога. Контейнер глобального каталога содержит один объект, который можно использовать для поиска по всему лесу.
  3. Используйте объект в контейнере для выполнения поиска. В C/C++вызовите QueryInterface , чтобы получить указатель IDirectorySearch на объект, чтобы использовать интерфейс IDirectorySearch для выполнения поиска. В Visual Basic используйте объект, возвращаемый из перечисления в запросе ADO.

Чтобы перечислить серверы глобального каталога на сайте, выполните поддерев LDAP "cn=yoursite,cn>=<sites,DN< конфигурацииNamingContext>", используя следующую строку фильтра.

(&(objectCategory=nTDSDSA)(options:1.2.840.113556.1.4.803:=1))

Этот фильтр использует оператор правила сопоставления LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) для поиска объектов nTDSDSA , имеющих битовый набор с низким порядком в битовой маске атрибута параметров . Бит низкого порядка, соответствующий константе NTDSDSA_OPT_IS_GC, определенной в Ntdsapi.h, определяет объект nTDSDSA сервера глобального каталога. Дополнительные сведения о сопоставлении правил см. в разделе "Синтаксис фильтра поиска".

Родительским объектом nTDSDSA является серверный объект, а свойство dNSHostName сервера — DNS-имя сервера глобального каталога.

Нельзя использовать константы #define, такие как NTDSDSA_OPT_IS_GC и LDAP_MATCHING_RULE_BIT_AND непосредственно в строке фильтра поиска. Однако эти константы можно использовать в качестве аргументов для функции, например swprintf_s для вставки значений констант в строку фильтра.

Глобальный каталог не представляет всю структуру дерева леса. Например, можно ожидать, что следующий пример кода перечисляет все домены в лесу и все дочерние объекты каждого домена. На самом деле все домены в лесу перечисляются, но ни один из перечисленных объектов домена не содержит дочерних элементов. Это ограничение глобального каталога.

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

Чтобы исправить это, необходимо привязать к каждому объекту домена, а затем перечислить дочерние объекты каждого домена. Правильный метод показан в следующем примере кода.

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

Дополнительные сведения и примеры кода, демонстрирующие поиск по всему лесу, см . в примере кода для поиска леса.