Вы должны использовать Глобальный каталог, чтобы выполнить глобальный поиск по всему вашему лесу. Если вы привяжете свой DirectorySearcher к своему глобальному каталогу, он должен предоставить вам все объекты, включая ваши дочерние домены.
Если в вашем лесу нет глобального каталога или у вас нет разрешения на привязку к глобальному каталогу (очень редко), вам нужно перечислить все домены в вашем лесу и выполнить запрос LDAP один за другим и агрегировать результаты самостоятельно.
Вот пример функции, которую я чертю для справки.
IEnumerable<SearchResult> Search(string domain, string filter)
{
DirectoryContext context = new DirectoryContext(DirectoryContextType.Forest, domain);
Forest forest = Forest.GetForest(context);
GlobalCatalog gc = null;
try
{
gc = forest.FindGlobalCatalog();
}
catch (ActiveDirectoryObjectNotFoundException)
{
// No GC found in this forest
}
if (gc != null)
{
DirectorySearcher searcher = gc.GetDirectorySearcher();
searcher.Filter = filter;
foreach (SearchResult result in searcher.FindAll())
{
yield return result;
}
}
else
{
foreach (Domain d in forest.Domains)
{
DirectorySearcher searcher = new DirectorySearcher(d.GetDirectoryEntry(), filter);
foreach (SearchResult result in searcher.FindAll())
yield return result;
}
}
}