首页 > 解决方案 > C# - GroupPrincipal.Getmembers(true) 不返回域用户,有什么替代方法?

问题描述

GroupPrincipal.Getmembers(true) 返回嵌套组中的所有用户,但不返回域用户(即主组)。有没有办法解决这个问题,所以我们可以获得包括域用户在内的所有用户。

我尝试了 GroupPrincipal.Getmembers(false) 但它没有引入所有用户,这将有助于查看代码。

我不想将域用户添加为单独的组,因为这将是硬编码并且性能也会受到影响。

请对此提出一些建议,一直在寻找

谢谢

这是示例代码

  using (var context1 = new PrincipalContext(ContextType.Domain, ""))
  {
    using (var group = GroupPrincipal.FindByIdentity(context1,"groupname"))

               {
                  if (group == null)
                 {

                 }
                  else
                  {
                      var users = group.GetMembers(true);
                       foreach (UserPrincipal user in users)
                       {
                          users.ToList().ForEach(sr => result.Add(sr.SamAccountName));
                         //user variable has the details about the user 
                    }
                 }
                }
            }​

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

解决方案


这是按预期工作的。由于 Windows 2000 年代 AD 的一些遗留怪癖,域用户的填充方式与普通组不同。考虑到它隐式授予的广泛访问权限,将域用户嵌套在一个组中确实不是一个好主意。但是,如果要查找这些成员,则需要按primaryGroupID属性搜索用户。对于域用户,它应该设置为 513。


推荐阅读