9

我想获取用户所在的组列表。

这是我的代码:

PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain.ac.uk",   "DC=mydomain,DC=AC,DC=UK", "user", "password");

UserPrincipal user = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, "MyUser");

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

foreach(Principal p in results)
{
   Response.Write(p.Name);
}

当我运行时,我在该行收到以下错误Response.Write(p.Name);

System.Runtime.InteropServices.COMException:指定的目录服务属性或值不存在。

当我检查结果的计数时,它返回 9 并且第一组是DomainUsers.

如何迭代列表中的所有 9 个组?谢谢。

以下是我得到的用户列表:

在此处输入图像描述

4

2 回答 2

5

当省略 PrincipalContext 类中描述的 LDAP 容器属性时,运行代码的用户必须对默认UserContainer (ie CN=Users,DC=yourDomain,DC=COM) 和ComputersContainer (ie CN=Computers,DC=yourDomain,DC=COM) 都具有读取权限。

如果用户没有所需的权限,您将收到以下错误消息:

指定的目录服务属性或值不存在

  • “context.Container”引发了“System.NullReferenceException”字符串 {System.NullReferenceException} 类型的异常

  • ((new System.Linq.SystemCore_EnumerableDebugView(groups)).Items[5]).Description' 引发了“System.Runtime.InteropServices.COMException”字符串 {System.Runtime.InteropServices.COMException} 类型的异常

于 2014-08-05T13:13:56.160 回答
1

尝试类似的东西

foreach(Principal p in results)
{ 
   if (p is GroupPrincipal) 
      Response.Write(p.DisplayName); 
}

我知道这听起来很愚蠢,但它在过去对我有用。您的结果看起来实际上只找到了 1 个安全组和 8 个“其他”类型的组。那些“其他”组可能不具备这些属性。

于 2012-09-04T22:06:42.877 回答