Опция Entire Directory
ищет в Глобальном каталоге, а не только в домене, как вы, похоже, узнали.Единственная разница в поиске заключается в том, к какому порту он подключается.Порт 389 - это порт LDAP, который ищет только домен сервера, к которому вы подключаетесь.Порт 3268 является глобальным каталогом.В краткой форме для этого используется GC://
вместо LDAP://
.
Если вы работаете только в одной среде, в которой вы знаете домен, вы можете просто жестко его кодировать.Это сохранит сетевые запросы GetCurrentForest()
и FindGlobalCatalog()
.
. Это то, что я имею в виду:
var searcher = new DirectorySearcher(new DirectoryEntry("GC://dept.mycomp.net"));
На ваш другой вопрос поиска определенной группы: Сохранитьпомните, что глобальный каталог выполняет поиск в вашем лесу AD, в котором может быть несколько доменов.Имена любого объекта применяются только уникально в домене, а не в лесу.Поэтому, если вы ищете в GC имя группы, вы можете получить дубликаты.(во всех ваших доменах может быть группа "IT Team")
Но в любом случае, если мы предположим, что у вас есть только одна группа с таким именем во всем вашем лесу, вы будете искать ее иполучить членов:
var groupname = "IT Team";
var members = new List<string>();
using (var searcher = new DirectorySearcher(new DirectoryEntry("GC://dept.mycomp.net"))) {
searcher.Filter = "(&(objectCategory=group)(objectClass=group)(cn=" + groupname + "))";
searher.PropertiesToLoad.Add("member"); //only get the member attribute
using (SearchResult result = searcher.FindOne()) {
foreach (var member in result.Properties["member"]) {
members.Add(member);
}
}
}
Когда это завершится, members
будет список distinguishedName
каждого члена.Если вам нужен другой атрибут (например, displayName
), вам нужно будет создать DirectoryEntry
для каждого члена и получить этот атрибут.
Существует несколько предостережений, которые могут иметь или не иметь отношение:
- В этой группе могут быть группы.Это не ищет членов этих групп.
- Если ваш домен доверяет другому домену за пределами вашего леса, то члены этого внешнего домена отображаются по-разному.Я говорил об этом в посте, который я сделал на своем сайте, под названием Что делает члена участником?
- Это может ограничивать число участников, которых вы видите, не более 1000 (еслигруппа насчитывает более 1000 членов).Я не могу вспомнить, если это случится с этим методом.Я знаю, что это происходит при чтении атрибута 'member' из
DirectoryEntry
.Если ваша группа не такая большая, то это не проблема.