Если я правильно понимаю ваш вопрос, вам нужно знать, какие объекты в Active Directory могут содержать Пользователь объект.
Я думаю, вы можете получить ответ из ADраздел схемы.Я быстро проверил раздел схемы, работающий под управлением Windows 2003 AD.Объект Пользователь может быть назначен на OU , контейнер , builtinDomain и domainDNS .
Я не проверял Windows 2008, но считаю, что она должна быть такой же.Многие знают, что такое OU и контейнер .Мало кто знает, что такое builtinDomain и domainDNS .Сомневаюсь, полезно ли это в вашем случае. builtinDomain - это специальный контейнер, используемый для хранения встроенной учетной записи.По умолчанию AD создал встроенный домен на CN=Builtin,DC=yourdomain,DC=com
. domainDNS - это путь к корневому домену DC=yourdomain,DC=com
.
Здесь представлена функция для поиска всех видов объектов в Active Directory в конкретном узле .Если вы считаете, что builtinDomain и domainDNS не имеют смысла в вашем случае, просто удалите его из фильтра LDAP.
IEnumerable<DirectoryEntry> FindUserParentObject(DirectoryEntry root)
{
using (DirectorySearcher searcher = new DirectorySearcher(root))
{
searcher.Filter = "(|(objectClass=organizationalUnit)(objectClass=container)(objectClass=builtinDomain)(objectClass=domainDNS))";
searcher.SearchScope = SearchScope.Subtree;
searcher.PageSize = 1000;
foreach (SearchResult result in searcher.FindAll())
{
yield return result.GetDirectoryEntry();
}
}
}