使用OU的部分路径在OU中搜索Active Directory目录
问题描述:
在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嵌套级别进行搜索就可以轻松获得完整路径。
答
你想要做的事情存在于纯粹的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);
}