获取用户所在的所有Active Directory组

时间:2015-12-07 13:19:21

标签: c# active-directory userprincipal

我正在寻找一种简单的方法来获取给定用户成员的所有Active Directory组。UserPrincipal中有两种方法,但两者都不符合此要求:

  • GetGroups():返回所有组,但不返回递归:
      

    此方法仅返回委托人直接成员的组;不执行递归搜索。

  • GetAuthorizationGroups():递归工作,但只返回安全组(没有通讯组)
      

    此函数仅返回作为安全组的组;不返回通讯组。

很遗憾,我无法找到GetAllGroups()GetDistributionGroups()之类的内容。有一个简短的解决方案可以递归地获得安全和通讯组吗?

1 个答案:

答案 0 :(得分:0)

我最后自己写了这个方法,这简直太短了 最有用的是Principal本身包含.GetGroups() - 方法,因此很容易编写一个递归方法,返回给定User-oder GroupPrincipal的所有组。

代码:

private static HashSet<GroupPrincipal> GetAllGroups(Principal principal)
{
    Dictionary<string, GroupPrincipal> groups = new Dictionary<string, GroupPrincipal>();
    foreach (GroupPrincipal group in principal.GetGroups())
    {
        groups[group.Sid.ToString()] = group;
        foreach (GroupPrincipal childGroup in GetAllGroups(group))
        {
            groups[childGroup.Sid.ToString()] = childGroup;
        }
    }
    return new HashSet<GroupPrincipal>(groups.Values);
}