【问题标题】:DirectoryEntry Invoke("Members", null) is not retrieving all the membersDirectoryEntry Invoke("Members", null) 未检索所有成员
【发布时间】:2019-10-11 14:24:10
【问题描述】:

我有一个名为“AuditUsers”的 ActiveDirectory 组,它有一些成员。

这是我的代码:

` DirectoryEntry de = new DirectoryEntry(ADSPath);
    DirectorySearcher deSearch = new DirectorySearcher(LDAP://CN=AuditUsers,OU=WEB Groups,OU=Groups,DC=doamin,DC=com);
    deSearch.Filter = "(&(objectCategory=person)(objectClass=user)(!userAccountControl:1.2.840.113556.1.4.803:=2))"; 
     object members = de.Invoke("Members", null);`

所以这个对象成员不会拉取所有实际上是其成员的用户。只有一些成员出现。有谁知道为什么有些人在这里失踪,即使他们是这个群体的一部分?对于那些遗漏的人,AD 中是否缺少任何关键字段?

我查看了失踪成员的AD,发现他们的objectCategory 有person,objectClass 有user。 userAccountControl 对于那些被拉取和未被拉取的成员是相同的。

谢谢

【问题讨论】:

    标签: c# windows active-directory active-directory-group


    【解决方案1】:

    调用IADsGroup.Members 只是枚举de.Properties["member"] 的更难的方法。两者都只是读取组的member 属性。

    但这并不是用户成为会员的唯一方式。我在an article I wrote 中更详细地介绍了它,但我怀疑这里发生的是该组被用作许多用户的主要组。而且会员资格的方式也不同。

    如果是这种情况,则用户的primaryGroupId 属性将设置为组的相对标识符 (RID)。 RID 是 SID 中的最后一组数字(也可以从组的primaryGroupToken 属性中检索)。在我写的关于finding all the members of a group 的文章中,我包含了一个示例,说明如何查找将该组作为主要组的所有用户。在我的网站上,它返回的是 DOMAIN\username,但我在此处对其进行了修改,使其返回 distinguishedName,因此您可以将从此获得的内容添加到从 member 属性获得的内容中。

    public static IEnumerable<string> GetPrimaryGroupMemberList(DirectoryEntry group) {
        group.RefreshCache(new[] { "distinguishedName", "primaryGroupToken" });
    
        var groupDn = (string) group.Properties["distinguishedName"].Value;
        var ds = new DirectorySearcher(
            new DirectoryEntry($"LDAP://{groupDn.Substring(groupDn.IndexOf("DC=", StringComparison.Ordinal))}"),
            $"(&(objectClass=user)(primaryGroupId={group.Properties["primaryGroupToken"].Value}))",
            new [] { "distinguishedName" })
        {
            PageSize = 1000
        };
    
        using (var primaryMembers = ds.FindAll()) {
            foreach (SearchResult primaryMember in primaryMembers) {
                yield return (string) primaryMember.Properties["distinguishedName"][0];
            }
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-19
      • 1970-01-01
      相关资源
      最近更新 更多