使用 OU 的部分路径在 Active Directory 中搜索 OU

2023-11-29

AD 查询语法中是否有一种方法可以通过搜索 OU 的部分路径来查找 OU 的完整路径?

例如,我的 OU 的完整路径是:

OU=Clerks,OU=OfficeA,OU=Administration,DC=domain,DC=local

现在,我想尝试使用部分路径搜索并找到该对象:

OU=Clerks,OU=OfficeA

我希望能够搜索类似的内容:

(&(objectCategory=organizationalUnit)(path=Clerks/OfficeA*))

我找不到任何有关如何完成此类操作的语法示例。我正在开发的程序要求我获取许多 OU 的路径,这些 OU 在 OU 的最后两层中都具有共同的结构,但是它们可以嵌套在域中的任何给定深度。如果我可以像这样进行搜索,那么只需通过最后两个 OU 嵌套级别搜索即可轻松获得完整路径。


您想要做的事情存在于纯 LDAP 实现中,它是一个名为可扩展匹配这似乎是正确解释的这篇维基文章。您还会发现一些有用的示例here.

但它不存在于 Active-Directory 中

所以这里有一个用 C# 编写的方法,它利用了Parent的属性DirectoryEntry.

   static List<DirectoryEntry> OuInTheFormOf(DirectoryEntry deBase, string ou1, string ou2)
    {
      List<DirectoryEntry> deList = null;

      /* Directory Search
       */
      DirectorySearcher dsLookFor = new DirectorySearcher(deBase);
      dsLookFor.Filter = ou1;
      dsLookFor.SearchScope = SearchScope.Subtree;
      dsLookFor.PropertiesToLoad.Add("ou");

      SearchResultCollection srcOUs = dsLookFor.FindAll();

      if (srcOUs.Count != 0)
      {
        deList = new List<DirectoryEntry>();

        foreach (SearchResult srOU in srcOUs)
        {
          DirectoryEntry deOU = srOU.GetDirectoryEntry();
          if (deOU.Parent.Name.ToUpper() == ou2.ToUpper())
            deList.Add(deOU);
        }
      }
      return deList;
    }

这是用法:

  /* Connection to Active Directory
   */
  DirectoryEntry deBase = new DirectoryEntry("LDAP://WM2008R2ENT:389/dc=dom,dc=fr");

  List<DirectoryEntry> l = OuInTheFormOf(deBase, "ou=Clerks", "ou=OfficeA");

  foreach (DirectoryEntry deTmp in l)
  {
    Console.WriteLine(deTmp.Properties["distinguishedName"].Value);
  }
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 OU 的部分路径在 Active Directory 中搜索 OU 的相关文章

随机推荐