Я пытаюсь получить имя всех пользователей из Active Directory с помощью PricipalContext. Я могу получить результаты по переменной IEnumurable как mainSearchResult, используя следующий код. Но я не могу прочитать результаты в mainSearchResult.
При попытке прочитать результаты от mainSearchResult, он заполнит сообщение об ошибке, такое как PrincipalOperation Exception было необработанным кодом пользователя: информация о домене не может быть восстановлена (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 без исключения.
У встроенной группы пользователей домена будут все пользователи объявлений, поэтому вы можете запросить информацию обо всех пользователях объявлений, как показано ниже. Здесь я храню данные в 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;
}