【问题标题】:DirectorySearcher does not return all AD group membersDirectorySearcher 不返回所有 AD 组成员
【发布时间】:2014-07-25 15:51:01
【问题描述】:

我尝试在 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 用户和计算机,该组中有未列出的用户。如果我查看“Member Of”页面,我可以看到组,并且通过组的 ACL 设置也会影响丢失的用户。但是,它们不在结果集中。

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

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

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

我现在知道DirectorySearcher 返回ADSI 编辑中看到的正确结果

我还知道缺少“主要组”(由 AD 用户和计算机中“成员”页面上的“设置主要组”按钮设置)。 AD中启用了Unix扩展,所以我们通常使用这个选项。更改主要组会更改缺少哪些成员。效果是确定性的。

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

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

【问题讨论】:

    标签: c# active-directory ldap


    【解决方案1】:

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

    【讨论】:

    • 关于值范围的信息很有帮助,但似乎并不能解决问题。这些团体有大约 80 和 300 名成员。我相信搜索结果是正确的。像(memberOf=groupId) 一样查询它的所有方式,一次加载member 属性,您的任何建议都会产生相同的结果,这并不反映我们在Windows 中观察到的实际安全组成员身份。我会进一步调查...
    • 主要组成员身份未存储在同一位置。看看support.microsoft.com/kb/297951
    • 布赖恩,你知道活动目录!我添加了对 "(primaryGroupId=" + groupRid + ")" 的搜索,现在我得到了所有预期的帐户。
    猜你喜欢
    • 1970-01-01
    • 2014-05-15
    • 2021-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-30
    • 1970-01-01
    相关资源
    最近更新 更多