如何在Active Directory中获取用户组?

时间:2011-10-11 10:33:47

标签: c# .net wpf active-directory

我使用此代码:

   List<GroupPrincipal> result = new List<GroupPrincipal>();

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

   // find your user
   UserPrincipal user = UserPrincipal.FindByIdentity(MyDomain , 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(p);
         }
      }
   }

但在这一行(user.GetAuthorizationGroups())我得到了一个例外

  

此服务器无法运行

6 个答案:

答案 0 :(得分:1)

在网络环境中:

System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups

或在您的背景下:

user.GetGroups()

MSDN

答案 1 :(得分:1)

根据我的记忆,异常可能是因为无法使用任何可用的DNS解析域名。确保它是,并且异常消失。

答案 2 :(得分:1)

检查这是否可以帮助您     http://support.microsoft.com/kb/842789

更新:

管理员的身份打开Visual Studio,然后打开解决方案。然后再试一次。我相信你的问题是因为应用程序的存在。

答案 3 :(得分:0)

当我从计算机(开发计算机)运行我的程序时,我遇到了同样的问题,不属于到我查询的域。我的意思是我得到了上下文,我得到了UserPrincipal信息,当我调用GetGroups()时我遇到了同样的错误。在服务器上运行的相同程序可以很好地工作。

我试图让我的开发计算机直接配置域DNS作为第一个DNS,但它是相同的。

我尝试在主机文件中硬配置域和DC地址,但它是相同的。

所以我从域中的虚拟机远程调试我的程序。

答案 4 :(得分:0)

我再次安装Active Directory并解决了我的问题......

答案 5 :(得分:0)

您尝试抓取GetGroups中包含的其中一个组是管理员组,需要特殊权限。尝试在上下文中设置用户/密码并使用getGroups(context)