1

环境:Visual Studio 2013、FrameWork 4.5、Telerik Controls、C#、WebForm 应用程序

使用:System.DirectoryServices 和 System.DirectoryServices.AccountManagement

我正在制作一个搜索工具,以便用户可以在多个林/域中搜索活动目录组名称。

搜索返回 1 个或多个组的列表,我将该列表放入 RadGrid (Telerik)。网格的每一行都是一个 AD 组。我想显示一个附加信息,向用户显示该组中有多少(计数?)成员(用户)。

private List<AdGroup> GetListOfGroupAD(string domain, string name, string samAccountName)
    {
        try
        {
            GroupPrincipal qbeGroup;
            using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain, domain))
            {
                qbeGroup = new GroupPrincipal(ctx);
                qbeGroup.Name = !string.IsNullOrEmpty(name) ? name : "*";
                qbeGroup.SamAccountName = !string.IsNullOrEmpty(samAccountName) ? samAccountName : "*";
                PrincipalSearcher srch = new PrincipalSearcher(qbeGroup);
                ((DirectorySearcher)srch.GetUnderlyingSearcher()).PageSize = 500;

                List<AdGroup> listeGroupe = srch.FindAll()
                                      .OrderBy(x => x.SamAccountName)
                                      .Select(x => new AdGroup()
                                      {
                                          SamAccountName = x.SamAccountName,
                                          Description = x.Description,
                                          Domain = domain,
                                          NbMember = 0 //Can i Get a count of members in group here ?????
                                      })
                                      .ToList();
                return listeGroupe;
            }
        }
        catch (ArgumentNullException ex)
        {
            writeToLog(ex.Message, 1);
            return null;
        }
        catch (Exception ex)
        {
            writeToLog(ex.Message, 1);
            return null;
        }
    }

public class AdGroup
    {
        public string SamAccountName { get; set; }
        public string Description { get; set; }
        public string Domain { get; set; }
        public int NbMember { get; set; }
    }

感谢您的帮助

理查德

4

1 回答 1

1

一种方法是在调用后指定搜索结果的类型为GroupPrincipalusing ,然后您可以使用collection 属性或方法将每个组的成员作为集合获取,该方法具有可选的布尔参数来指定是否需要递归搜索组中的嵌套成员。此时,获取集合的大小。.OfType()FindAll()MembersGetMembers()

List<AdGroup> listeGroupe = srch.FindAll()
    .OfType<GroupPrincipal>()
    .OrderBy(x => x.SamAccountName)
    .Select(x => new AdGroup()
    {
        SamAccountName = x.SamAccountName,
        Description = x.Description,
        Domain = domain,
        NbMember = x.Members.Count
    })
    .ToList();
于 2016-01-29T18:02:09.067 回答