.net - UserPrincipal.GetGroups失败,出现未知错误

标签 .net active-directory directoryservices

我正在尝试使用以下代码获取用户的所有Active Directory组:

    private static IEnumerable<string> GetGroupNames(string userName)
    {
        using (var context = new PrincipalContext(ContextType.Domain))
        {
            using (var userPrincipal = UserPrincipal.FindByIdentity(context, userName))
            {
                var groupSearch = userPrincipal.GetGroups(context);
                var result = new List<string>();
                foreach (var principal in groupSearch)
                {
                    Log.LogDebug("User {0} is member of group {0}", userPrincipal.DisplayName, principal.DisplayName);
                    result.Add(principal.SamAccountName);
                }
                return result;
            }
        }
    }

此代码正确找到用户主体,但是在使用PrincipalOperationException调用GetGroups时失败:未知错误(0x80005000)。

根异常:
   at System.DirectoryServices.AccountManagement.ADStoreCtx.GetGroupsMemberOf(Principal foreignPrincipal, StoreCtx foreignContext)
   at System.DirectoryServices.AccountManagement.Principal.GetGroupsHelper(PrincipalContext contextToQuery)
   at System.DirectoryServices.AccountManagement.Principal.GetGroups(PrincipalContext contextToQuery)
   at [line of the GetGroup call]

内部异常(COMException):
   at System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail)
   at System.DirectoryServices.DirectoryEntry.Bind()
   at System.DirectoryServices.DirectoryEntry.get_AdsObject()
   at System.DirectoryServices.PropertyValueCollection.PopulateList()
   at System.DirectoryServices.PropertyValueCollection..ctor(DirectoryEntry entry, String propertyName)
   at System.DirectoryServices.PropertyCollection.get_Item(String propertyName)
   at System.DirectoryServices.AccountManagement.ADUtils.RetriveWkDn(DirectoryEntry deBase, String defaultNamingContext, String serverN

Another report with this problem

有什么线索吗?

最佳答案

将Environment.UserDomainName添加为PrincipalContext的名称参数有助于:

using (var context = new PrincipalContext(ContextType.Domain, Environment.UserDomainName))

我仍然不知道为什么PrincipalContext(ContextType.Domain)仅用于查找UserPrincipal而不是用户组。 COM错误消息“未知错误”不是很有用,MSDN上实际上没有记录仅ContextType的PrincipalContext构造函数重载。正如Harvey Kwok指出的那样,它闻起来像.NET框架的问题。

关于.net - UserPrincipal.GetGroups失败,出现未知错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4518472/

相关文章:

c# - LDAP SearchResult 不包含用户属性

c# - 使用 C# 将用户添加到 Active Directory 组时遇到问题

.net - 使用 System.DirectoryServices 验证域用户

c# - 在 Azure 中使用 SendGrid 创建 Outlook 日历邀请(C#、.NET)

c# - 无法从 .NET 3.5 连接到 SQL Server 2008

c# 检查 Windows 帐户是否在特定域中被锁定

c# - 从事件目录中获取经理电子邮件 ID

c# - 从当前用户 appdata 文件夹中的文件读取 C#

c# - 与google prediction API 具有相似功能的.Net 库

c# - .NET Core 设置 - 最佳实践