2016-09-02 2 views
0

Я хочу получить имя и фамилию пользователя, зарегистрированного на его машине, используя AD. Я использую следующий код:Поиск LastName и FirstName в AD

string server = ConfigurationManager.AppSettings["ActiveDirectory.Server"]; 

DirectoryEntry entry = new DirectoryEntry(@"LDAP://" + server); 
DirectorySearcher searcher = new DirectorySearcher(entry); 

User user = GetUser(entry); 

searcher.Filter = "sAMAccountName=" + user.UserAD; 
searcher.PropertiesToLoad.Add("memberof"); 
SearchResult result = searcher.FindOne(); 

private static User GetUser(DirectoryEntry userEntry) 
{ 
    Usuario user = new User(); 
    string[] username = HttpContext.Current.Request.ServerVariables["AUTH_USER"].Split('\\'); 

    //THIS IS WHAT I NEED BUT IT DOES RETURN null. 
    //User.Name= (string)userEntry.Properties["givenName"].Value; 
    //User.LastName= (string)userEntry.Properties["sn"].Value; 

    user.Domain = username[0]; 
    user.UserAD = username[1]; 

    return user; 
} 

Теперь я знаю searcher.PropertiesToLoad есть [memberof] и [adspath], последняя дает мне имя и фамилию, разделенную запятой, что-то вроде CN="gates, billy", но я не хочу использовать подстроки и index, есть ли какое-либо свойство, как [firstName], [lastName] в списке свойств?

Я сделал поиск, что DirectoryEntry имеют свойство givenName и sn, но это возвращает null

ответ

0

PropertiesToLoad набор именно то, что вам нужно изменить. Active Directory вернет только те свойства, которые определены в этом наборе, поэтому вы не видите givenName и sn. Просто добавьте эти свойства, а также:

searcher.PropertiesToLoad.Add("givenName"); 
searcher.PropertiesToLoad.Add("sn"); 

В качестве альтернативы, просто добавьте свойство * загрузить все из них:

searcher.PropertiesToLoad.Add("*"); 
Смежные вопросы