通过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')!
答案 0 :(得分:2)
尝试使用
var context = new PrincipalContext(ContextType.Domain, "yourcompany.com", "DC=yourcompany,DC=com", ContextOptions.Negotiate);
将ContextOption设置为Negotioate后,使用Kerberos或NTLM对客户端进行身份验证,因此即使未提供用户名和密码,帐户管理API也会使用调用线程的安全上下文绑定到对象。
答案 1 :(得分:1)
0x80005000 = E_ADS_BAD_PATHNAME所以你在某处提供了一个无效的adspath,也许你必须添加LDAP://前缀或对面这两次?设置断点并检查值......
修改强> AdsPath应该是类似“LDAP:// CN = Administator,CN = Users,DC = contoso,DC = com”的值,您似乎有错误的路径。
答案 2 :(得分:1)
我遇到了同样的问题,我在创建PrincipalContext
时通过提供域名解决了这个问题:
var domain = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
var user = UserPrincipal.FindByIdentity(domain, Environment.UserName);