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(使用前将#替换为@)