Active directory 特定OU内子OU中所有用户的LDAP查询

Active directory 特定OU内子OU中所有用户的LDAP查询,active-directory,ldap,Active Directory,Ldap,我必须处理的active directory是这样布置的:域包含许多OU。其中一个OU被命名为“主要OU”。在该OU中,有几个OU以全球办事处的位置命名(即“芝加哥”“巴黎”) 任何实际的有血有肉的用户帐户都会被放入以其工作的办公室命名的OU中,作为其主要OU。任何别名、通用帐户或其他未直接绑定到真人的用户帐户都将“主要OU”OU设置为其主要OU 就数据而言,这种主要的OU区别是唯一能够表明哪些用户是真实的人,哪些用户不是。没有只包含真人的组,在任何字段中都没有指示他们是否是真人的标记,并且严格

我必须处理的active directory是这样布置的:域包含许多OU。其中一个OU被命名为“主要OU”。在该OU中,有几个OU以全球办事处的位置命名(即“芝加哥”“巴黎”)

任何实际的有血有肉的用户帐户都会被放入以其工作的办公室命名的OU中,作为其主要OU。任何别名、通用帐户或其他未直接绑定到真人的用户帐户都将“主要OU”OU设置为其主要OU

就数据而言,这种主要的OU区别是唯一能够表明哪些用户是真实的人,哪些用户不是。没有只包含真人的组,在任何字段中都没有指示他们是否是真人的标记,并且严格禁止对active directory或任何用户帐户进行任何更改

我的任务是编写一个查询,它只会得到所有实际的有血有肉的人

不幸的是,LDAP并不是我的强项,我想出的唯一方法是单独搜索这些办公室子单元并将所有结果放在一起,但是有很多办公室,如果添加了任何办公室,则需要对查询进行更改,这是我需要避免的


是否有办法查询特定OU的“子”OU中的所有用户,但不直接返回父OU中的任何用户?

是的,当然-您需要:

1) 绑定到特定的OU

DirectoryEntry myOU = new DirectoryEntry("LDAP://OU=MyOU,......,DC=MyCompany,DC=com");
2) 列举其所有子OU

DirectorySearcher subOUsearcher = new DirectorySearcher(myOU);
subOUsearcher.SearchScope = SearchScope.OneLevel; // don't recurse down
subOUsearcher.Filter = "(objectClass=organizationalUnit)";

foreach(SearchResult subOU in subOUsearcher.FindAll())
{
   // stick those Sub OU's into a list and then handle them
}
3) 逐个枚举每个子OU中的所有用户,并将其粘贴到全局用户列表中

DirectorySearcher userSearcher = new DirectorySearcher(myCurrentSubOu);
userSearcher.SearchScope = SearchScope.OneLevel; // don't recurse down
userSearcher.Filter = "(objectClass=user)";

foreach(SearchResult user in userSearcher.FindAll())
{
  // stick those users into a list being built up
}
4) 把名单还给我

Marc

//创建一个从根目录开始的新DirectorySearcher。
//你可以在任何地方开始
//通过在DirectoryEntry构造函数中提供值。
DirectorySearcher search=新的DirectorySearcher(new DirectoryEntry());
//将作用域设置为子树以搜索所有子级。
searcher.SearchScope=SearchScope.Subtree;
//将筛选器设置为仅查找组织单位
//有你要找的名字。
searcher.Filter=“(&(objectClass=organizationalUnit)(name=“+ouName+”)”);
//如果你只寻找一个结果,那么做以下两件事。
SearchResult=searcher.FindOne();
DirectoryEntry newDir=result.GetDirectoryEntry();

什么编程环境。净。NET 2.0或.NET 3.5??我正在寻找LDAP查询,但我最终将使用.NET 3.5中的DirectorySearcher对象来执行查询这可能是我必须要做的事情,我只是想知道是否有某种方法可以编写一个查询,一次性返回所有用户,类似于searchScope设置,可能只搜索子OU而不搜索父OU。不,我不认为您可以在一个请求中执行此操作-您必须一点一点地获取您的信息:-)以防其他人像我一样遇到此问题:您应该确保在“myCurrentSubOu”上面的步骤3)中是DirectoryEntry类型-我使用了subOU的Path属性,它是string类型。由于接受字符串(筛选器)的DirectorySearcher构造函数也有重载,这可能会导致看似奇怪的行为。