2016-06-13 25 views
2

我想得到一个用户组的列表直接的成员(即没有嵌套)。实际上,以获取你的会员选项卡的广告中看到:我如何才能得到一个用户来自AD的组而不嵌套

enter image description here

我使用下列获得团体名单:

public List<GroupPrincipal> GetGroups(string userName) 
{ 
    List<GroupPrincipal> result = new List<GroupPrincipal>(); 
    PrincipalContext myDomain = new PrincipalContext(ContextType.Domain, "mydomain.com"); 
    UserPrincipal user = UserPrincipal.FindByIdentity(myDomain, userName); 
    if (user != null) 
    { 
     PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups(); 
     try 
     { 
      // iterate over all groups 
      foreach (Principal p in groups) 
      { 
       // make sure to add only group principals 
       if (p is GroupPrincipal) 
       { 
        result.Add((GroupPrincipal)p); 
       } 
      } 
     } 
     catch (Exception e) 
     { 

     } 
    } 
    return result; 
} 

然而,这种检索所有群体,包括嵌套的。 (即,如果在上面的屏幕截图的列表中有一个组嵌套在另一个组中 - 两个组都返回)。

我该如何检索Active Directory中显示的列表?

回答

1

GetAuthorizationGroups()将递归地获得所有安全组+额外的组,例如在登录时评估的主组或主动主体。

使用GetGroups()代替:

此方法仅返回其主要是直接所属的组;不执行递归搜索。递归搜索结果可用于用户主体对象。有关更多信息,请参阅GetAuthorizationGroups方法。

相关问题