我正在寻找一种简单的方法来获取给定用户成员的所有Active Directory组。UserPrincipal
中有两种方法,但两者都不符合此要求:
此方法仅返回委托人直接成员的组;不执行递归搜索。
此函数仅返回作为安全组的组;不返回通讯组。
很遗憾,我无法找到GetAllGroups()
或GetDistributionGroups()
之类的内容。有一个简短的解决方案可以递归地获得安全和通讯组吗?
答案 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);
}