获取组的列表中给出UserPrincipal(Get the list of Groups for

2019-06-23 19:14发布

我想获得该用户在组列表。

这是我的代码:

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组列表中? 谢谢。

下面是用户的名单,我得到:

Answer 1:

当省略如PrincipalContext类中描述的LDAP容器属性,运行代码的用户必须具有读取权限这两个默认User容器(即CN=Users,DC=yourDomain,DC=COM )和Computers容器(即CN=Computers,DC=yourDomain,DC=COM )。

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

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

  • “context.Container”投掷类型的异常“System.NullReferenceException”字符串{System.NullReferenceException}

  • ((新System.Linq.SystemCore_EnumerableDebugView(组))。项[5])。说明”投掷类型的异常 'System.Runtime.InteropServices.COMException' 字符串{System.Runtime.InteropServices.COMException}



Answer 2:

尝试类似

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

我知道这听起来很愚蠢,但它在过去一直为我工作。 您的结果看起来像只竟然发现1个安全组和8个“其他”类型的组。 这些“其他”组可能不具备这些属性。



文章来源: Get the list of Groups for the given UserPrincipal