我正在尝试使用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集合中的值。
答案 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;
}