Вы также можете попробовать использовать Разрешение неоднозначных имен , который представляет собой специальный запрос AD, который ищет частичные совпадения в нескольких атрибутах (список этих атрибутов находится в этой статье).
Вы не можете использовать PrincipalSearcher
, но используйте ANR.Вы должны использовать DirectorySearcher
(это то, что PrincipalSearcher
использует в любом случае в фоновом режиме).
Вот пример:
var searchRoot = new DirectoryEntry("LDAP://domain.com");
var searcher = new DirectorySearcher(searchRoot) {
Filter = "(anr=Holonka)"
};
searcher.PropertiesToLoad.Add("displayName");
using (var results in = searcher.FindAll()) {
foreach (SearchResult result in results) {
if (result.Properties.Contains("displayName")) {
var displayName = (string) result.Properties["displayName"][0];
//do something else
}
}
}
При использовании DirectorySearcher
разумно использовать PropertiesToLoad
.Если вы этого не сделаете, он вернет каждый атрибут, который имеет значение, что, вероятно, намного больше данных, чем вам нужно.Это бесполезная трата сетевого трафика и времени.
Оператор using
также целесообразен, поскольку SearchResultCollection
не может быть полностью очищен сборщиком мусора.
Я написал об этом больше в статье, которую я написал: Active Directory: лучшая производительность