我正在尝试获取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下的所有用户。
答案 0 :(得分:0)
如果我对您的理解正确,那么问题是,如果您在域中搜索 all 个组,则会得到一个数字。如果您分别在每个OU中搜索组,则会得到较小的数字。
原因可能不是所有组都在OU中。您要么:
CN=Group1,dc=dev,dc=local
)具有组,或者objectClass=container
)中具有组,它们类似于OU,但不是。确实,OU和容器之间的唯一区别是OU可以将组策略应用到它们,而容器则不能。当您收集所有OU的名称时,如果您确实只在寻找OU(objectClass=organizationalUnit
),那么您将错过容器和其中的组。一个新域带有多个默认容器,例如Users
,Computers
,System
等。