Поиск ActiveDirectory, используя полное имя в C #? - PullRequest
8 голосов
/ 05 июля 2011
Метод

UserPrincipal FindByIdentity позволяет мне искать ActiveDirectory, используя имя пользователя. Однако я также хочу иметь возможность выполнять поиск, используя настоящее имя пользователя (например, Уэйн, Брюс)

Как я могу это сделать?

1 Ответ

11 голосов
/ 05 июля 2011

Вы можете использовать PrincipalSearcher и принцип «запрос за примером» для поиска:

// create your domain context
PrincipalContext ctx = new PrincipalContext(ContextType.Domain);

// define a "query-by-example" principal - here, we search for a UserPrincipal 
// and with the first name (GivenName) of "Bruce"
UserPrincipal qbeUser = new UserPrincipal(ctx);
qbeUser.GivenName = "Bruce";

// create your principal searcher passing in the QBE principal    
PrincipalSearcher srch = new PrincipalSearcher(qbeUser);

// find all matches
foreach(var found in srch.FindAll())
{
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....          
}

Если вы еще этого не сделали - обязательно прочитайте статью MSDN Управление принципами безопасности каталогов в .NET Framework 3.5 , в которой хорошо показано, как наилучшим образом использовать новые функции в System.DirectoryServices.AccountManagement* 1008. *

Обновление:

Конечно, в зависимости от ваших потребностей, вы можете захотеть указать другие свойства для созданного вами «пользовательского запроса» субъекта:

  • Surname (или фамилия)
  • DisplayName (обычно: имя + пробел + фамилия)
  • SAM Account Name - имя вашей учетной записи Windows / AD
  • User Principal Name - ваше имя в стиле "username@yourcompany.com"

Вы можете указать любое из свойств в UserPrincipal и использовать их как «запрос по примеру» для PrincipalSearcher.

...