У меня есть следующий метод, используемый для поиска группы пользователей на локальном компьютере (сначала выполняется) или в текущем лесу.
public string FindUserGroup(string group)
{
//Search local computer
using (DirectorySearcher searcher = new DirectorySearcher(new DirectoryEntry()))
{
searcher.Filter = "(&(objectClass=group)(|(cn=" + group + ")(dn=" + group + ")))";
SearchResult result = searcher.FindOne();
if (result != null)
return TranslateDirectoryEntryPath(result.GetDirectoryEntry().Path);
}
//Search current forest
Forest forest = Forest.GetCurrentForest();
foreach (Domain domain1 in forest.Domains)
{
using (DirectorySearcher searcher = new DirectorySearcher(domain1.GetDirectoryEntry()))
{
searcher.Filter = "(&(objectClass=group)(|(cn=" + group + ")(dn=" + group + ")))";
SearchResult result = searcher.FindOne();
if (result != null)
return TranslateDirectoryEntryPath(result.GetDirectoryEntry().Path);
}
}
return string.Empty;
}
Моя проблема в том, что у нас в качестве примера есть «domain.local» и «mydomain.local», а мой текущий логин привязан к «domain.local», поэтому использование ниже не сможет найти «mydomain.local», даже если я через пользовательский интерфейс Windows могу.
Как я могу искать всех просматриваемых провайдеров с точки зрения моих компьютеров, если я не знаю их всех? Должен ли я ДЕЙСТВИТЕЛЬНО выполнять работу реестра самостоятельно?
Edit:
Одним из отличий в двух доменах является «уровень», на котором они находятся, когда я в диалоговом окне обозревателя объектов выбирает «Местоположения», он выглядит следующим образом:
- Компьютер
- Все направление
- mydomain.local
Таким образом, "mydomain.local" существует вне того, что называется "Весь каталог", но мой компьютер может найти его, если это имеет какое-то значение?