Привязка к глобальному каталогу
Глобальный каталог — это пространство имен, содержащее данные каталога для всех доменов в лесу. Глобальный каталог содержит частичную реплику каждого каталога домена. Он содержит запись для каждого объекта в корпоративном лесу, но не содержит все свойства каждого объекта. Вместо этого он содержит только свойства, указанные для включения в глобальный каталог.
Глобальный каталог хранится на определенных серверах в пределах предприятия. Только контроллеры домена могут служить серверами глобального каталога. Администраторы указывают, содержит ли данный контроллер домена глобальный каталог с помощью диспетчера сайтов и служб 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
Обыскать весь лес
- Привязаться к корню пространства имен глобального каталога.
- Перечислите контейнер глобального каталога. Контейнер глобального каталога содержит один объект, который можно использовать для поиска по всему лесу.
- Используйте объект в контейнере для выполнения поиска. В 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
Дополнительные сведения и примеры кода, демонстрирующие поиск всего леса, см. в разделе Пример кода для поиска леса.