2011-05-03 216 views
0

在AD Query语法中是否有方法通过搜索其部分路径来查找OU的完整路径?使用OU的部分路径在OU中搜索Active Directory目录

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

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

现在,我想通过使用部分路径,试图寻找和发现对象:

OU=Clerks,OU=OfficeA 

我倒是希望能够搜索类似:

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

我找不到如何做到像THI任何语法示例秒。我正在开发一个程序,要求我获得许多OU的路径,它们在OU的最后两级中具有共同结构,但是它们可以嵌套在域中的任何给定深度。如果我能以这种方式进行搜索,那么只需通过最后两个OU嵌套级别进行搜索就可以轻松获得完整路径。

回答

1

你想要做的事情存在于纯粹的LDAP实现中,它是一个名为ExtensibleMatch的功能,这似乎在this wiki article中正确解释。你还会发现一些有用的例子here

但它不存在于活动目录

所以这里是在C#是利用了Parent propertie一个DirectoryEntry的writen的方法。

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); 
    } 
相关问题