2016-03-10 12 views
0

從組中提取用戶時,發出異常消息爲「嘗試解析跨存儲引用時,目標主體的SID無法解析,錯誤代碼爲1332.」嘗試解析跨存儲引用時,目標主體的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) 

我得到的錯誤。 我可以檢查這個錯誤的任何建議或在循環過程中從列表中跳過這個成員。

回答

0

我認爲你的問題與group.GetMembers()的返回類型有關,它不一定是UserPrincipal而是Principal

所以你可能想檢查一下,如果PrincipalUserPrincipalGroupPrincipal

foreach(var principal in groupMembers) 

在您的情況下會是更好的選擇。

+0

這也給我錯誤。我只想跳過這一行,任何想法如何以任何方式完成 –

+0

手動迭代並捕獲異常? – TGlatzer

+0

它出來的循環和groupMembers是IEnumerable,所以不知道如何擺脫該項目。而且一旦我在groupMembers上得到異常,我無法做任何事情,它會拋出異常。 –