Как мне найти список идентификаторов пользователей, используя LDAP и C #? - PullRequest
0 голосов
/ 21 октября 2019

Мне нужно искать пользователей по конкретному списку идентификаторов пользователей. Он работает нормально, если я использую этот фильтр для поиска одного пользователя:

 using (DirectorySearcher ds = new DirectorySearcher(de) { Filter = $"(&(sAMAccountType=805306368)(sAMAccountName=xyz123))" })
 {
    SearchResult sr = ds.FindOne();
 }

Я нашел эту страницу синтаксиса фильтра LDAP и показывает, что условия могут быть вложенными.

(| (cn = Джим Смит) (& (данное имя = Джим) (sn = Смит)))

Условия могут быть вложены в скобки, но убедитесь, что скобки совпадают.

Поэтому я попытался использовать этот фильтр и FindAll (), и хотя я ожидал увидеть 1 для нас и 1 для Канады, он нашел только один в Канаде.

(&(sAMAccountType = 805306368) (! (sAMAccountName = xyz123) (sAMAccountName = abc456)))

Поиск домена: us

Количество: 0

Поиск домена: Канада

Количество: 1

Так что, возможно, я недостаточно хорошо понимаю синтаксис фильтра. Кроме того, можно ли выполнить поиск по всем доменам одним вызовом?

1 Ответ

2 голосов
/ 21 октября 2019

Вы используете восклицательный знак (!), что означает «нет». Вы хотите использовать канал (|), что означает «или»:

(&(sAMAccountType=805306368)(|(sAMAccountName=xyz123)(sAMAccountName=abc456)))

Если у вас есть большой список имен пользователей, которые вы ищете (я говорю сотни), выможет подумать о разделении их на отдельные поиски. Я действительно рассмотрел это (с примером кода) в статье, которую я написал об этом: Active Directory: лучшая производительность

...