在Active Directory中按OU搜索时未获得所有组

时间:2019-05-08 09:06:48

标签: c# active-directory ldap-query organizational-unit

我正在尝试获取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))";
};

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

1 个答案:

答案 0 :(得分:0)

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

原因可能不是所有组都在OU中。您要么:

  1. 在域的根目录(例如CN=Group1,dc=dev,dc=local)具有组,或者
  2. 容器objectClass=container)中具有组,它们类似于OU,但不是。确实,OU和容器之间的唯一区别是OU可以将组策略应用到它们,而容器则不能。当您收集所有OU的名称时,如果您确实只在寻找OU(objectClass=organizationalUnit),那么您将错过容器和其中的组。一个新域带有多个默认容器,例如UsersComputersSystem等。