DirectorySearcher不会返回所有AD组成员

时间:2014-07-24 21:12:15

标签: c# active-directory ldap

我尝试在C#中获取Active Directory组的所有成员。我的代码如下:

var searcher = new DirectorySearcher(defaultNamingContextEntry) {
    Filter = "(memberOf=" + group.Properties["distinguishedName"].Value + ")",
    PageSize = 1000,
    SearchScope = SearchScope.Subtree,
    Sort = new SortOption("sAMAccountName", SortDirection.Ascending)
};
var members = searcher.FindAll();

代码到目前为止工作,但是它有一个问题,即它不会返回所有组成员。

我相信(我不确定)它会返回我能真正看到的"成员" ADSI Edit中的属性(有问题的组比较大,但远远低于1000),但这些并不是所有成员。根据AD用户和用户的说法,有些用户是计算机,未列出的组中。如果我查看"会员和#34;页面,我可以看到该组,并且通过该组的ACL设置也会影响缺少的用户。但是,它们不在结果集中。

如果相关,该小组是主要小组。

这里有什么问题?什么是正确的参数或查询?这是AD本身的问题吗?

更新:我已经进一步调查了这个问题(并测试了Brian的解决方案,如果你的属性集很大,我强烈推荐这个解决方案;我认为必须有某种分页属性的机制,但无法找到它的工作方式):

我现在知道DirectorySearcher会返回正确的结果,如ADSI编辑中所示。

我也知道"小组" (由"设置主要组"按钮位于"会员和#34; AD用户和计算机中的页面)设置丢失。在AD中启用了Unix扩展,因此我们通常使用此选项。更改主要组会更改缺少哪些成员。效果是确定性的。

我已经使用ADSI编辑查看了条目,但找不到允许我在搜索中添加主要组的字段。虽然我已启用所有内容(强制,可选,构建,反向链接和仅系统属性),但我看不到主要组。

我修改过的问题是:检索主要组的正确LDAP过滤器是什么?

1 个答案:

答案 0 :(得分:1)

你需要做价值范围。有关示例,请参阅http://www.netid.washington.edu/documentation/enumeratingLargeGroups.aspx