Поделиться через


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

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

Глобальный каталог хранится на определенных серверах в пределах предприятия. Только контроллеры домена могут служить серверами глобального каталога. Администраторы указывают, содержит ли данный контроллер домена глобальный каталог с помощью диспетчера сайтов и служб 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=<вашего сайта>,cn=sites,<DN ConfigurationNamingContext>", используя следующий фильтр.

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

Этот фильтр использует оператор правила сопоставления LDAP_MATCHING_RULE_BIT_AND (1.2.840.113556.1.4.803) для поиска объектов nTDSDSA, у которых установлен младший бит в битовой маске атрибута options. Бит низкого порядка, соответствующий константе 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

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