c# - 尝试解析跨存储引用时,无法解析目标主体的 SID。错误代码为 1332

标签 c# active-directory ldap ldap-query active-directory-group

从组中获取用户时,出现异常消息“尝试解析跨商店引用时,无法解析目标主体的 SID。错误代码为 1332。”

        PrincipalContext ctx = null;
        if (!string.IsNullOrWhiteSpace(adUserName))
        {
            ctx = new PrincipalContext(ContextType.Domain, domainName, adUserName, adPassword);
        }
        else
        {
            ctx = new PrincipalContext(ContextType.Domain, domainName);
        }
        var groupNames = commaSeparatedGroupNames.Split(',');
        IEnumerable<Principal> users = null;
        foreach (var groupName in groupNames)
        {
            if (!string.IsNullOrWhiteSpace(groupName))
            {
                var userGroup = GroupPrincipal.FindByIdentity(ctx, groupName.Trim());
                if (userGroup == null)
                    throw new InvalidOperationException("Active Directory Group Not Found :: " + groupName);

                var usersInGroup = userGroup.GetMembers();

                if (users == null)
                {
                    users = usersInGroup;
                }
                else
                {
                    users = users.Union(usersInGroup);
                }
            }
        }

        return users;

做的时候

foreach (UserPrincipal user in users)

我遇到了错误。 我可以检查此错误或在循环期间从列表中跳过此成员的任何建议。

最佳答案

Sandra 的解决方案几乎是正确的,但是在 MoveNext() 方法上会抛出异常,因此如果将 try..catch block 放在其中,它会成功'工作。

var enumerator = members.GetEnumerator();

var moveNext = true;

while (moveNext)
{
    try
    {
        moveNext = enumerator.MoveNext();

        if (moveNext)
        {
            Principal member = enumerator.Current;
        
            Console.WriteLine("{0}\r\n\t{1}\r\n\t{2}", member, member.Guid, member.DistinguishedName);
        }
    } 
    catch (Exception ex) 
    {
        Console.WriteLine(ex.Message);
    }
}

关于c# - 尝试解析跨存储引用时,无法解析目标主体的 SID。错误代码为 1332,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35913995/

相关文章:

F# - 如何索引集合(特别是 PropertyCollection)

ruby-on-rails - Ruby on Rails 3: Devise::LdapAdapter.get_ldap_param 未定义方法错误

node.js - Passport js序列化用户和反序列化用户

c# - 适用于 Mac 的 Visual Studio : How to run tests with x64

c# - 从 Java 到 C#,线程结构的差异

c# - LINQ 中的空间数据方法

c# - 如何轻松地将 DataReader 转换为 List<T>?

triggers - 在 Active Directory 更改时运行脚本

PowerShell 将 1 天添加到 AD 用户的 AccountExpire 属性

ldap - JNDI-LDAP 分页