DirectorySearcher不返回所有AD组成员

本文关键字:AD 组成员 返回 DirectorySearcher | 更新日期: 2023-09-27 18:14:36

我尝试在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编辑中实际看到的"成员"属性(有问题的组有点大,无法比较所有内容,但远低于1000),但这些不是所有成员。根据AD users &计算机,在未列出的组中。如果我查看"Member Of"页面,我可以看到组,并且通过组进行的ACL设置也会影响丢失的用户。但是,它们不在结果集中。

所讨论的组是主组,如果这是相关的。

怎么了?正确的参数或查询是什么?这是广告本身的问题吗?

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

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

我也知道"Primary Group"(通过在AD Users &电脑)不见了。在AD中启用了Unix扩展,因此我们通常使用此选项。更改主组将更改丢失的成员。效果是确定的。

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

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

DirectorySearcher不返回所有AD组成员

您需要做值范围。参见http://www.netid.washington.edu/documentation/enumeratingLargeGroups.aspx获取示例。