0x80005000 UserPrincipal.GetGroups 上的未知错误,OU 中有特殊字符
0x80005000 Unknown Error on UserPrincipal.GetGroups with Special Characters in OU
我正在尝试使用 UserPrincipal 的 GetGroups 方法。如果用户帐户位于包含正斜杠的 OU 中,则对 GetGroups 的调用将失败并出现 COM 未知错误 0x80005000。找到用户帐户就可以找到,我可以访问其他属性。如果我删除 OU 名称中的斜杠,则一切正常。我找到了转义名称中斜杠的参考,但它包含在 GetGroups 方法下。我还发现确保使用我已经完成的 PrincipalContext(ContextType, String) 构造函数。我还尝试使用带有转义斜线的 FQDN 并获得相同的结果。我在下面的 C# 中有一些示例代码:
我正在使用 Visual Studio 2012。代码是 运行 Windows 10 Enterprise x64。 .net 目标版本是 4.5
using System;
using System.Linq;
using System.DirectoryServices.AccountManagement;
string SamAccountName = "user1";
//The OUs the user is in:
//Broken OU: "OU=Test / Test,DC=contoso,DC=com"
//Working OU: "OU=Test & Test,DC=contoso,DC=com"
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, SamAccountName);
//The user was found so this works
Console.WriteLine("User Found: {0}", user.DistinguishedName);
//This causes COM Exception: Unknown Error 0x80005000
string output = string.Join(Environment.NewLine, user.GetGroups().Select(x => x.Name).ToArray());
Console.WriteLine(output);
最终我只是替换了 OU 名称中这些类型的任何特殊字符,因为这是迄今为止最简单的解决方案。我主要只是想确保我正在编写的代码不会在路上爆炸。
我认为这是一个错误。
AccountManagement
命名空间的 .NET Core 实现的源代码现已在线提供。我想 .NET Framework 版本大同小异。
我认为问题出在 line 1218 of ADStoreCtx.cs:
roots.Add(new DirectoryEntry("GC://" + gc.Name + "/" + p.DistinguishedName, this.credentials != null ? this.credentials.UserName : null, this.credentials != null ? this.credentials.Password : null, this.AuthTypes));
即将用户的专有名称放入 LDAP 路径中,该路径使用斜杠作为分隔符,不转义 DN 中的任何斜杠。
我知道可以在 GitHub 中报告 .NET Core 的错误,但我不确定在哪里报告 .NET Framework 的错误。
我正在尝试使用 UserPrincipal 的 GetGroups 方法。如果用户帐户位于包含正斜杠的 OU 中,则对 GetGroups 的调用将失败并出现 COM 未知错误 0x80005000。找到用户帐户就可以找到,我可以访问其他属性。如果我删除 OU 名称中的斜杠,则一切正常。我找到了转义名称中斜杠的参考,但它包含在 GetGroups 方法下。我还发现确保使用我已经完成的 PrincipalContext(ContextType, String) 构造函数。我还尝试使用带有转义斜线的 FQDN 并获得相同的结果。我在下面的 C# 中有一些示例代码:
我正在使用 Visual Studio 2012。代码是 运行 Windows 10 Enterprise x64。 .net 目标版本是 4.5
using System;
using System.Linq;
using System.DirectoryServices.AccountManagement;
string SamAccountName = "user1";
//The OUs the user is in:
//Broken OU: "OU=Test / Test,DC=contoso,DC=com"
//Working OU: "OU=Test & Test,DC=contoso,DC=com"
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, Environment.UserDomainName);
UserPrincipal user = UserPrincipal.FindByIdentity(domainContext, IdentityType.SamAccountName, SamAccountName);
//The user was found so this works
Console.WriteLine("User Found: {0}", user.DistinguishedName);
//This causes COM Exception: Unknown Error 0x80005000
string output = string.Join(Environment.NewLine, user.GetGroups().Select(x => x.Name).ToArray());
Console.WriteLine(output);
最终我只是替换了 OU 名称中这些类型的任何特殊字符,因为这是迄今为止最简单的解决方案。我主要只是想确保我正在编写的代码不会在路上爆炸。
我认为这是一个错误。
AccountManagement
命名空间的 .NET Core 实现的源代码现已在线提供。我想 .NET Framework 版本大同小异。
我认为问题出在 line 1218 of ADStoreCtx.cs:
roots.Add(new DirectoryEntry("GC://" + gc.Name + "/" + p.DistinguishedName, this.credentials != null ? this.credentials.UserName : null, this.credentials != null ? this.credentials.Password : null, this.AuthTypes));
即将用户的专有名称放入 LDAP 路径中,该路径使用斜杠作为分隔符,不转义 DN 中的任何斜杠。
我知道可以在 GitHub 中报告 .NET Core 的错误,但我不确定在哪里报告 .NET Framework 的错误。