While trying to resolve a cross-store reference, the SID of the target principal could not be resolved. The error code is 1332

混江龙づ霸主 提交于 2019-12-11 12:34:20

问题


While fetching users from group, giving exception message as "While trying to resolve a cross-store reference, the SID of the target principal could not be resolved. The error code is 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;

When doing

foreach (UserPrincipal user in users)

I am getting the error. Any suggestions i can check for this error or skip this member from list during looping.


回答1:


I just encountered this same problem yesterday, and this is the best answer I found at this link:

IEnumerator<Principal> enumerator = members.GetEnumerator();
while (enumerator.MoveNext())
{
    try
    {
        Principal member = enumerator.Current;
        Console.WriteLine({0}\r\n\t{1}\r\n\t{2}",member.ToString(),member.Guid,member.DistinguishedName);
    } catch (Exception ex) {
        Console.WriteLine(ex.Message);
    }
}

This is how you would iterate the IEnumerable collection 'manually'. It gives you a chance to attempt getting the Principal and to catch the exception if it's an undefined SID or some other issue.




回答2:


Sandra's solution is almost right, but the exception is thrown on the MoveNext() method, so if you place your try..catch block inside it, it won't work.

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);
    }
}



回答3:


I think your problem is tied to the return type of group.GetMembers(), which isn't neccessarily a UserPrincipal but a Principal.

So you might want to check, if the Principal is a UserPrincipal or a GroupPrincipal.

foreach(var principal in groupMembers)

would be a better choice in your case.



来源:https://stackoverflow.com/questions/35913995/while-trying-to-resolve-a-cross-store-reference-the-sid-of-the-target-principal

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!