Не удалось получить информацию о домене (1355). Не умеет читать значения в коллекции LINQ

1

Я пытаюсь получить имя всех пользователей из 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 без исключения.

Теги:
linq
active-directory
active-directory-group

1 ответ

0

У встроенной группы пользователей домена будут все пользователи объявлений, поэтому вы можете запросить информацию обо всех пользователях объявлений, как показано ниже. Здесь я храню данные в 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;
    }

Ещё вопросы

Сообщество Overcoder
Наверх
Меню