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.
I think your problem is tied to the return type of
group.GetMembers()
, which isn't neccessarily aUserPrincipal
but aPrincipal
.So you might want to check, if the
Principal
is aUserPrincipal
or aGroupPrincipal
.would be a better choice in your case.
Sandra's solution is almost right, but the exception is thrown on the
MoveNext()
method, so if you place yourtry..catch
block inside it, it won't work.I just encountered this same problem yesterday, and this is the best answer I found at this link:
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.