如何查找Active Directory的全局编录?

我想在GC://DC=xxx,DC=yyy,DC=zzz格式的Active Directory环境中搜索用户。 但是,如何在仲裁Active Directory环境中以编程方式查找全局编录? 每个域名是否始终对应于全局编录? 任何替代方法我都可以尝试?

注意: Forest.FindAllGlobalCatalogs()返回服务器名称列表,但实际上我无法使用它们进行搜索。

Edit1:这就是我想要做的:假设我的activedirectory有一个名为domain1.root.com的域,然后我将使用GC:// DC = domain1,DC = root,DC = com来搜索用户。 但这总是全球目录吗? 每个域都必须有一个全局目录吗?

Edit2:我现在可以使用以下代码搜索用户:

  var currentForest = Forest.GetCurrentForest(); var globalCatalog = currentForest.FindGlobalCatalog(); Console.WriteLine(globalCatalog.Name); //DirectorySearcher searcher = new DirectorySearcher("GC://"+y.Name); DirectorySearcher searcher = globalCatalog.GetDirectorySearcher(); searcher.Filter = @"samaccountname=skaranth"; Console.WriteLine(searcher.SearchRoot.Path); var result = searcher.FindOne(); if(result!=null) Console.WriteLine(result.Properties["distinguishedname"][0]); searcher.Dispose(); globalCatalog.Dispose(); currentForest.Dispose(); 

你到底想要实现什么?

全局编录是存储在某些域控制器上的特殊属性子集。 虽然每个域控制器都具有该一个域的完整属性和对象集,但全局编录包含来自AD林中所有域的数据。

因此,当您需要在多个域中查找内容时,GC才真正发挥作用。 如果您只有一个域,那么GC根本不会真正帮助您。

Forest.FindAllGlobalCatalogs()确实会为您提供包含全局编录数据集的所有域控制器服务器的列表。 那你为什么不能用那些搜索? 你能告诉我们你到目前为止尝试过的吗?

全局目录只是 – 全局 – 例如,您根本不应该有任何理由想要指定特定的服务器……无论如何,服务器都应该具有相同的数据集。

再说一遍:为什么你觉得需要找到一个带有全局目录的服务器,一旦你拥有它,你想用这些信息做什么? 为什么在进行全局目录搜索时需要指定服务器?

使用该搜索字符串格式Active Directory将在您提交查询时为您查找GC服务器。 它将根据该AD站点结构进行查找,找到最近的GC服务器并使用该服务器进行查询。

编辑:

在回答您的编辑时,使用GC://前缀表示您有兴趣进行全局编录搜索,因此它将始终使用全局编录服务器,因此您的问题始终是全局编录。 当您使用LDAP://为搜索字符串添加前缀时,您将遇到域控制器,并且必须处理非全局属性。 无需弄清楚具体的服务器,AD会为您做到这一点。

这是一个搜索字符串,它将通过用户主体名称获取用户,返回userPrincipalName,cn和distinguishedisedName属性值(如果有),并从域的根开始执行子树搜索:

 GC://domain1.root.com;(&(objectClass=user)(objectCategory=Person)(userPrincipalName=myuser));userPrincipalName,cn,distinguishedName;subtree 

请记住,您必须执行LDAP://搜索以获取未存储在全局编录中的属性,并绑定到GC搜索返回的distinguishedName的路径值。