我尝试在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过滤器是什么?
答案 0 :(得分:1)