active-directory - 特定 OU 中子 OU 中所有用户的 LDAP 查询

标签 active-directory ldap

我必须处理的事件目录是这样布置的:域包含许多 OU。这些 OU 之一被命名为“主 OU”。在这个 OU 中,有几个以全局办事处位置命名的 OU(即“芝加哥”“巴黎”)。

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

在数据方面,这个主要的 OU 区别是唯一表明哪些用户是真人,哪些用户不是。没有只包含真人的组,在任何领域都没有指示他们是否是真人,并且严格禁止对事件目录或任何用户帐户进行任何更改。

我的任务是编写一个查询,该查询只会获取所有实际有血有肉的人。

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

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

最佳答案

是的,当然 - 您需要:

1)绑定(bind)到特定的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)返回该列表

马克

关于active-directory - 特定 OU 中子 OU 中所有用户的 LDAP 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1050043/

相关文章:

基于 Linux 的域管理解决方案?

mysql - Powershell InvalidOperation错误

active-directory - 为什么我从我的 LDAP 属性中得到 'System.__ComObject'?

ldap - OpenLdap - 如何使属性 uidNumber 自动生成?

Java LDAP 日期计算

java - 使用 Spring Security 实现 LDAP 身份验证时出现 Gradle 依赖错误

active-directory - 如何在 C# 中读取 msExchMailboxSecurityDescriptor 属性

c++ - 如何获取用于 Active Directory API 的 IADsUser 对象?

windows - LDAP 服务器签名协议(protocol)

docker - Docker 容器中的 LDAP 身份验证