【发布时间】:2012-04-20 10:15:44
【问题描述】:
我想获取用户所在的组列表。
这是我的代码:
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 个组?谢谢。
以下是我得到的用户列表:
【问题讨论】:
-
如何初始化 PrincipalContext?
-
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "mydomain.ac.uk", "DC=mydomain,DC=AC,DC=UK", "user", "password");
-
name 属性可能尚未填充(可能是因为它来自与您查询的域不同的域??)。尝试询问 DisplayName 或 DistinguishedName 或 SamAccountName 或 SID。
-
我试过这些名字,但错误还是一样。当我在调试视图中检查时,以下是我得到的错误: Name ( '((System.DirectoryServices.AccountManagement.Principal)((new System.Linq.SystemCore_EnumerableDebugView
(results)) .Items[1])).Name' 引发了类型为 'System.Runtime.InteropServices.COMException' 的异常) -
我猜这是因为您的“用户”帐户没有足够的权限来读取组对象。你看到
DistinguishName属性和Guid属性了吗?
标签: c# active-directory userprincipal