У меня есть пример кода для запроса всех пользователей, которые соответствуют определенному номеру отдела и отображают все связанные свойства LDAP для каждого пользователя:
string attribute = "departmentnumber";
string value = "123";
DirectoryEntry rootEntry = new DirectoryEntry("LDAP://ldap.acme.com:389");
rootEntry.AuthenticationType = AuthenticationTypes.None;
DirectorySearcher searcher = new DirectorySearcher(rootEntry, $"({attribute}={value})");
SearchResultCollection results = searcher.FindAll();
foreach (SearchResult result in searcher.FindAll())
{
var allLDAPProperties = result.Properties.PropertyNames;
foreach (var property in allLDAPProperties)
{
Console.WriteLine((result.Properties[property.ToString()].Count > 0 ? result.Properties[property.ToString()][0] : string.Empty).ToString());
}
Console.WriteLine(Environment.NewLine);
}
Console.ReadKey();
Однако я хотел бы добавить несколько критериев к своему начальному поиску(Например, вернуть всех пользователей с атрибутом «Departmentnumber», совпадающим с «123», и атрибутом «joblevel», совпадающим с «5.» Я не могу найти правильный способ предоставления критериев составного фильтра для DirectorySearcher
.
Я знаю, что могу отфильтровать исходный набор результатов с помощью дополнительной обработки в цикле foreach
, но я пытаюсь быть эффективным.