无法检索有关域的信息(1355)。无法读取LINQ集合中的值

时间:2014-05-18 02:54:33

标签: c# linq active-directory active-directory-group

我正在尝试使用PricipalContext从Active Directory中获取所有用户的名称。我可以使用以下代码将IEnumurable变量的结果作为principalSearchResult获取。但我无法在principalSearchResult下阅读结果。

在尝试从principalSearchResult读取结果时,它将填充错误消息,例如 PrincipalOperation用户代码未处理异常:无法检索有关域的信息(1355)。

我不知道这个错误,我无法读取搜索结果中的值。

这是我的代码:

 PrincipalContext ouContext = new PrincipalContext(ContextType.Domain, AD.ServerDomain, AD.LDAPUser, AD.LDAPPasswoprd);
 UserPrincipalEx userpricipalex = new UserPrincipalEx(ouContext);

 PrincipalSearcher mySearch = new PrincipalSearcher(userpricipalex);
 mySearch.QueryFilter = userpricipalex;

 IEnumerable<UserPrincipalEx> principalSearchResult = mySearch.FindAll().Cast <UserPrincipalEx>();

 var s = (from user in oPrincipalSearchResult      //Here I am getting the exception
                                   select new User
                                   {
                                    DisplayName=user.DisplayName,
                                    EmailAddress=user.EmailAddress
                                     .
                                     .
                                     .
                                    });

如何解决此错误并毫无例外地读取该IEnumurable集合中的值。

1 个答案:

答案 0 :(得分:-1)

Domain Users内置组将包含所有广告用户,因此您可以查询所有广告用户详细信息,如下所示。在这里,我将详细信息存储在DataTable中。您还可以将它们存储为自定义业务对象的列表。希望这会有所帮助!!


string groupName="Domain Users";
using (GroupPrincipal objGroupPrincipal = GetGroupPrincipal(FQDN, AOuserName, AOpassword, groupName))
            {
                if (objGroupPrincipal != null)
                    using (PrincipalSearchResult<Principal> objPrincipalSearchResult = objGroupPrincipal.GetMembers(false))
                    {
                        objPrincipalSearchResult.ToList<Principal>().FindAll(p => p != null).Cast<UserPrincipal>().ToList<UserPrincipal>()
                            .ForEach(delegate(UserPrincipal objUserPrincipal)
                            {
                                DataRow drUser = dtUsers.NewRow();
                                drUser["displayname"] = objUserPrincipal.DisplayName;
                                drUser["UserName"] = objUserPrincipal.SamAccountName;
                                drUser["Domain"] = FQDN;
                                drUser["AccountActive"] = objUserPrincipal.IsAccountLockedOut();
                                drUser["FirstName"] = "";
                                drUser["initials"] = objUserPrincipal.MiddleName;
                                drUser["LastName"] = objUserPrincipal.Surname;
                                drUser["mail"] = objUserPrincipal.EmailAddress;
                                drUser["telephoneNumber"] = objUserPrincipal.VoiceTelephoneNumber;
                                drUser["LastLogOn"] = Convert.ToString(objUserPrincipal.LastLogon);
                                drUser["ADUserPath"] = Convert.ToString(objUserPrincipal.DistinguishedName);                                   
                                drUser["AccExpiryDate"] = Convert.ToString(objUserPrincipal.AccountExpirationDate);
                                drUser["PwdExpiryDate"] = "";
                                dtUsers.Rows.Add(drUser);
                            });


                    }
            }

子方法

public static GroupPrincipal GetGroupPrincipal(string FQDN, string AOuserName, string AOpassword, string groupName)
    {
        GroupPrincipal objGroupPrincipal = null;
        objGroupPrincipal = GroupPrincipal.FindByIdentity(GetPrincipalContext(FQDN, AOuserName, AOpassword), IdentityType.SamAccountName, groupName);
        return objGroupPrincipal;
    }
public static PrincipalContext GetPrincipalContext(string FQDN, string AOuserName, string AOpassword)
    {
        PrincipalContext objPrincipalContext = null;
       objPrincipalContext = new PrincipalContext(ContextType.Domain, FQDN, AOuserName, AOpassword);
        return objPrincipalContext;
    }