0

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

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

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

  • GetAuthorizationGroups():递归工作,但仅返回安全组(无通讯组)

    此函数仅返回属于安全组的组;不返回通讯组。

不幸的是,我找不到类似GetAllGroups()or的东西GetDistributionGroups()。是否有一个简短的解决方案来递归获取安全和通讯组?

4

1 回答 1

0

我最终自己编写了该方法,它非常短。
最有用的是它Principal本身包含.GetGroups()-Method,因此很容易编写一个返回给定 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);
}
于 2015-12-09T08:34:54.527 回答