0

我正在尝试获取 Active Directory 中的所有组名。该组应按 OU 名称过滤。还有一个选项可以在没有任何 OU 过滤的情况下获取所有组。获取所有组是提供 20 多个组。但是当我尝试按 OU 名称获取组时,很少有组显示来自不同 OU 的(6 个组)。

我已经尝试了使用过滤器的 DirectorySearcher,但未能获取所有组。

DirectoryEntry root = null;
                if (ou == "")
                {
                    // This is giving all groups
                    root = new DirectoryEntry("LDAP://RootDSE");
                    root = new DirectoryEntry("LDAP://" + root.Properties["defaultNamingContext"][0]);
                }
                else
                {
                    // When passed 1 by 1 OU name, few of the groups are showing
                    string cName = getExactDomainName(domain);
                    root = new DirectoryEntry("LDAP://OU=" + ou + "," + cName);
                }


需要搜索过滤器查询以按 OU 名称提供所有组。

编辑: 1. 我正在获取某个域中的所有 OU 并将它们显示在一个清单框中。2. 用户可以从检查列表框中选择一个或多个组。根据选中的组和选择的 OU(在第一步中),将显示用户。过滤器看起来像:

var search = new DirectorySearcher(new DirectoryEntry())
{
    search.Filter = "(&(objectCategory=user)(memberOf=cn=" + groupName + ",ou=" + OUName + ",dc=dev,dc=local))";
};

现在的问题是,在第一步中选择 No OU 时,会出现 20 个组。但是,当 OU 被一一选择时,组的总数不是 20。我想,我在搞乱过滤器查询。我只需要一个选项,用户将选择 OU,然后所有组都将显示给用户。用户现在将检查组,该组下的所有用户和 OU 将被获取。

4

1 回答 1

0

如果我理解正确,问题是如果您搜索域中的所有组,您会得到一个数字。如果您分别在每个 OU 中搜索组,您会得到一个较小的数字。

原因可能是并非所有组都在一个 OU 中。你要么:

  1. 在域的根目录下有组(例如CN=Group1,dc=dev,dc=local),或
  2. 在容器( )中有组,objectClass=container类似于 OU,但不是。实际上,OU 和容器之间的唯一区别是 OU 可以应用组策略,而容器不能。当您收集所有 OU 的名称时,如果您真的只寻找 OU ( objectClass=organizationalUnit),那么您将错过容器和其中的组。一个新域带有几个默认容器,如UsersComputersSystem等。
于 2019-05-08T12:27:16.823 回答