2012-03-07 1 views
12

Я пытаюсь найти пользователей в AD с их именем и именем, используя .net DirectorySearcher.Как я могу искать пользователей в Active Directory на основе имени и имени

В факты можно найти на основе SamAccountName, делая это:

DirectorySearcher searcher1 = new DirectorySearcher(entry); 
searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(SAMAccountname={0}))",aLogin); 

SearchResult results1; 
results1 = searcher1.FindOne(); 

Но когда я пытаюсь сделать это:

DirectorySearcher searcher1 = new DirectorySearcher(entry); 
searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(givenname={0})(sn={1})", aName, aSName); 

SearchResultCollection results1; 
results1 = searcher1.FindAll(); 

Это не работает. В сообщении говорится «Недопустимый фильтр» Так что я не могу фильтровать на основе заданного имени и sn ??

Как я могу это достичь? Спасибо за помощь

+0

?? Голос вниз через 1 год? Зачем? – bAN

+1

Я нахожу этот вопрос общедоступным без конкретной проблемы с опечаткой – PandaWood

ответ

7

Вам не хватает закрывающих круглых скобок в вашем фильтре. Попробуйте:

searcher1.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(givenname={0})(sn={1}))", aName, aSName); 
0

Ни в коем случае это ошибка ..

Я забыл )

23

Если вы используете .NET 3.5 или более поздней версии, вы можете также сделать использование 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" and a last name (Surname) of "Miller" 
UserPrincipal qbeUser = new UserPrincipal(ctx); 
qbeUser.GivenName = "Bruce"; 
qbeUser.Surname = "Miller"; 

// 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 Managing Directory Security Principals in the .NET Framework 3.5, который показывает хорошо как наилучшим образом использовать новые функции в System.DirectoryServices.AccountManagement. Или см. Пространство имен MSDN documentation on the System.DirectoryServices.AccountManagement.

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

  • DisplayName (обычно: первое имя + пробел + фамилия)
  • SAM Account Name - ваш Windows/AD имя учетной записи
  • User Principal Name - ваш "[email protected]" имя стиля

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

+0

Спасибо за советы. Я отредактировал весь свой код – bAN

+0

Что было снято в статье MSDN, кажется – PandaWood

+0

Где в этом примере вы можете указать строку подключения AD - имя пользователя/пароль и т. Д.? – PandaWood

Смежные вопросы