【问题标题】:Active Directory, enumerating user's groups, COM exceptionActive Directory,枚举用户组,COM 异常
【发布时间】:2011-08-10 03:12:31
【问题描述】:

在通过 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);
        }

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

【问题讨论】:

  • 在 Null 上调用某些东西会导致 NullReferenceException,而不是 COMException,是的,用户不是 null,我已经简化了代码(删除了错误检查)
  • 顺便说一句,在微软支持上找到了一些东西,似乎是已知问题,我会发布链接

标签: c# .net active-directory


【解决方案1】:

尝试使用

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

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

      • 你能否提供更多细节,什么路径,要检查什么值?
      • ((System.DirectoryServices.AccountManagement.Principal)(user)).DistinguishedName 等于 'CN=MyAccountName,OU=MyCompany Users,DC=mycompany,DC=local' 并且在别人的电脑没有
      • support.microsoft.com/kb/324433 - 找到了这个,但似乎它也不起作用
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-01
      • 2010-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多