2016-08-06 4 views
2

Я нахожу имя пользователя из Active Directory, передавая идентификатор электронной почты. Он работает нормально. Но для получения имени пользователя требуется 30-40 секунд. Есть ли другой лучший способ найти имя пользователя из Active Directory по адресу электронной почты?Найти имя пользователя из Active Directory, используя идентификатор электронной почты

Пожалуйста, обратитесь к моему коду:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "domainname")) 
{ 
    UserPrincipal userPrincipal = new UserPrincipal(context); 
    PrincipalSearcher principalSearch = new PrincipalSearcher(userPrincipal); 

    foreach (UserPrincipal result in principalSearch.FindAll()) 
    { 
     if (result != null && result.EmailAddress != null && result.EmailAddress.Equals(user.Email, StringComparison.OrdinalIgnoreCase)) 
     { 
      user.FirstName = result.GivenName; 
      user.LastName = result.Surname; 
     } 
    } 
} 
+0

Возможный дубликат [пользователь поиска в ActiveDirectory по адресу электронной почты] (http://stackoverflow.com/questions/18658345/lookup-user-in-activedirectory-by-email-address) – tharif

ответ

5

Вам не нужно перечислять все пользователям найти один из них! Попробуйте этот код:

using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "domainname")) 
{ 
    UserPrincipal yourUser = UserPrincipal.FindByIdentity(context, EmailAddress); 

    if (yourUser != null) 
    { 
     user.FirstName = result.GivenName; 
     user.LastName = result.Surname; 
    } 
} 

Если это не сработает, или если вам нужно искать несколько критериев сразу, использовал PrincipalSearcher с QBE (запрос по образцу) подход - поиска один пользователь, который вам нужен - не переходите через все пользователей!

// create your domain context 
using (PrincipalContext context = new PrincipalContext(ContextType.Domain, "domainname")) 
{  
    // define a "query-by-example" principal - 
    UserPrincipal qbeUser = new UserPrincipal(ctx); 
    qbeUser.EmailAddress = yourEmailAddress; 

    // 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.....   
    } 
} 
+0

благодарственных you.Its отлично работал – SivaRajini