在AD查询语法中是否有办法通过搜索其部分路径来查找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嵌套级别搜索完整路径就很容易。
答案 0 :(得分:2)
您想要做的事情存在于纯LDAP实现上,它是一个名为 ExtensibleMatch 的功能,似乎在this wiki article中得到了正确解释。您还会找到一些有用的示例here。
但它在Active-Directory中不存在
所以这是一个在C#中编写的方法,它利用Parent
的{{1}}属性。
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;
}