Подтвердить что ты не робот

Как я могу искать пользователей в активном каталоге на основе имени и имени

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

В фактах, которые я могу найти на основе 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??

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

4b9b3361

Ответ 1

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

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

Ответ 2

Если вы используете .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 - ваше имя пользователя "[email protected]"

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

Ответ 3

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

Я забыл )