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过滤器也是什么?
您需要做值范围。参见http://www.netid.washington.edu/documentation/enumeratingLargeGroups.aspx获取示例。