Active Directory,枚举用户组,COMexception

通过AD .NET API枚举当前用户的组我有时会得到

COMException: Unknown error (0x80005000) 

这是我的代码:

  var userName = Environment.UserName; var context = new PrincipalContext(ContextType.Domain); var user = UserPrincipal.FindByIdentity(context, userName); foreach (var userGroup in user.GetGroups()) { Console.WriteLine(userGroup.Name); } 

有什么问题? 我认为每个用户都可以检索HIS组的列表?这似乎是奇怪的行为,有时它可以像这样再现:当在’userA’PC上运行时,它崩溃了,但它成功地枚举了其他’userB’组(在’下’用户A’)!

尝试使用

 var context = new PrincipalContext(ContextType.Domain, "yourcompany.com", "DC=yourcompany,DC=com", ContextOptions.Negotiate); 

将ContextOption设置为Negotioate后,将使用Kerberos或NTLM对客户端进行身份validation,因此即使未提供用户名和密码,帐户管理API也会使用调用线程的安全上下文绑定到对象。

0x80005000 = E_ADS_BAD_PATHNAME所以你在某处提供了一个无效的adspath,也许你必须添加LDAP://前缀或对面两次这样做? 设置断点并检查值…

编辑: AdsPath应该是类似“LDAP:// CN = Administator,CN = Users,DC = contoso,DC = com”的值,您似乎有一个错误的路径。

我遇到了同样的问题,我在创建PrincipalContext时通过提供域名解决了这个问题:

 var domain = new PrincipalContext(ContextType.Domain, Environment.UserDomainName); var user = UserPrincipal.FindByIdentity(domain, Environment.UserName);