Как искать в глобальном каталоге (весь лес) с помощью PrincipalContext

 myUserList AppUsers = new myUserList();    
 using (PrincipalContext pcxt = new PrincipalContext(ContextType.Domain, domainName))
            {
                UserPrincipal User = new UserPrincipal(pcxt);
                User.EmailAddress = emailString;

                PrincipalSearcher srch = new PrincipalSearcher(User);
                foreach (var principal in srch.FindAll())
                {
                    var p = (UserPrincipal)principal;
                    myUserRow User = AppUsers.NewUsersRow();
                    User.FirstName = p.GivenName;
                    User.LastName = p.Surname;
                    User.Email = p.EmailAddress;
                    AppUsers.AddUsersRow(User);

                }
            }

У меня есть код, аналогичный приведенному выше, который ищет в Active Directory информацию о пользователе, используя класс PrincipalContext.

Как видите, я передаю имя домена во время поиска. Как я могу изменить этот кусок кода, чтобы вместо этого искать во всем лесу (т.е. в глобальном каталоге), но по-прежнему использовать класс PrincipalContext?

Кажется, я не могу найти рабочий пример, который использует класс PrincipalContext для поиска в глобальном каталоге.

Я видел этот пост Как искать пользователей в глобальном каталоге в лесу AD с несколькими деревьями, но плакат, похоже, предполагает, что они не нашли решения, использующего класс PrincipalContext, им пришлось вернуться к DirectorySearcher.

Есть ли пример кода класса PrincipalContext, демонстрирующий поиск по всему лесу (глобальный каталог)?


person StackTrace    schedule 14.07.2016    source источник


Ответы (1)


хорошо, я получил это работает. Мне просто нужно было изменить свой код, как показано ниже.

 myUserList AppUsers = new myUserList();    
 using (PrincipalContext pcxt = new PrincipalContext(ContextType.Domain,  "my-global-catalogue-server.subdomain.domain.com:port", "DC=subdomain,DC=domain,DC=com"))
            {
                UserPrincipal User = new UserPrincipal(pcxt);
                User.EmailAddress = emailString;

                PrincipalSearcher srch = new PrincipalSearcher(User);
                foreach (var principal in srch.FindAll())
                {
                    var p = (UserPrincipal)principal;
                    myUserRow User = AppUsers.NewUsersRow();
                    User.FirstName = p.GivenName;
                    User.LastName = p.Surname;
                    User.Email = p.EmailAddress;
                    AppUsers.AddUsersRow(User);

                }
            }
person StackTrace    schedule 14.07.2016