How can I search users in Active Directory based on surname and first name?

I'm trying to search for users in AD with their surname (sn) and first name (givenName) с помощью DirectorySearcher in.NET.

I can find a user based on sAMAccountname с этим кодом:

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

 SearchResult results1;
 results1 = searcher1.FindOne();

But when I try to do it with givenName а также sn:

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

SearchResultCollection results1;
results1 = searcher1.FindAll();

Это не работает; the message says "Invalid Filter"; Can I not filter based on givenName а также sn?

Как мне этого добиться?

3 ответа

Решение

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

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

Если вы используете.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 " Управление принципами безопасности каталогов" в.NET Framework 3.5, которая показывает, как наилучшим образом использовать новые функции в System.DirectoryServices.AccountManagement, Или см. Документацию MSDN в пространстве имен System.DirectoryServices.AccountManagement.

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

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

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

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

Я забыл )

Другие вопросы по тегам