在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嵌套级别,就很容易获得完整的路径。
发布于 2011-05-04 03:24:26
您想要做的事情存在于纯LDAP实现中,这是一个称为ExtensibleMatch的特性,在this wiki article中似乎正确地解释了这个特性。你也会发现一些有用的例子here。
但它不存在于Active-Directory中
下面是一个使用C#编写方法,它利用了DirectoryEntry的Parent属性。
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);
}https://stackoverflow.com/questions/5872838
复制相似问题