C#从Active Directory获取特定用户的所有组

C#从Active Directory获取特定用户的所有组,c#,active-directory,usergroups,C#,Active Directory,Usergroups,我正在尝试获取特定用户的所有组,如Active Directory“组的成员”中所列。 我找到了一个代码,但它给出了所有的组,如果一个组包含几个组,我得到的是这些组,而不是包含它们的主组。。我想得到的名单,因为它是没有“背景”组 我在这里找到的代码: public List<GroupPrincipal> GetGroups(string userName) { List<GroupPrincipal> result = new List<GroupPrinc

我正在尝试获取特定用户的所有组,如Active Directory“组的成员”中所列。 我找到了一个代码,但它给出了所有的组,如果一个组包含几个组,我得到的是这些组,而不是包含它们的主组。。我想得到的名单,因为它是没有“背景”组

我在这里找到的代码:

public List<GroupPrincipal> GetGroups(string userName)
{
   List<GroupPrincipal> result = new List<GroupPrincipal>();

   // establish domain context
   PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain);

   // find your user
   UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, userName);

   // if found - grab its groups
   if(user != null)
   {
      PrincipalSearchResult<Principal> groups = user.GetAuthorizationGroups();

      // iterate over all groups
      foreach(Principal p in groups)
      {
         // make sure to add only group principals
         if(p is GroupPrincipal)
         {
             result.Add((GroupPrincipal)p);
         }
      }
   }

   return result;
}
public List GetGroups(字符串用户名)
{
列表结果=新列表();
//建立域上下文
PrincipalContext yourDomain=新PrincipalContext(ContextType.Domain);
//查找您的用户
UserPrincipal user=UserPrincipal.FindByIdentity(您的域,用户名);
//如果找到-抓取它的组
如果(用户!=null)
{
PrincipalSearchResult groups=user.GetAuthorizationGroups();
//迭代所有组
foreach(组中的主体p)
{
//确保只添加组主体
if(p是GroupPrincipal)
{
结果。添加((GroupPrincipal)p);
}
}
}
返回结果;
}
还没有找到有效的解决方案,知道吗?

该方法用于测试用户的安全权限。它告诉您,用户有权获得返回的组所授予的所有安全特权。因此,它确实为您提供了所有嵌套的安全组

例如,如果用户是组B的成员,而组B在组a中,则用户有权获得授予组a的权限,因此
GetAuthorizationGroups()
将返回组a

我认为您要寻找的是方法,它只返回用户是其直接成员的组

PrincipalSearchResult<Principal> groups = user.GetGroups();
PrincipalSearchResult groups=user.GetGroups();
该方法用于测试用户的安全权限。它告诉您,用户有权获得返回的组所授予的所有安全特权。因此,它确实为您提供了所有嵌套的安全组

例如,如果用户是组B的成员,而组B在组a中,则用户有权获得授予组a的权限,因此
GetAuthorizationGroups()
将返回组a

我认为您要寻找的是方法,它只返回用户是其直接成员的组

PrincipalSearchResult<Principal> groups = user.GetGroups();
PrincipalSearchResult groups=user.GetGroups();

发布失败的尝试,我们可以从那里继续。另外,请阅读,我添加了代码,但我不喜欢这样。有没有机会用DirectoryEntry和Searcher来做这件事?请发布失败的尝试,我们可以从那里开始。另外,请阅读,我添加了代码,但我不喜欢这样。有机会用DirectoryEntry和Searcher来做吗?