Я надеюсь смочь вытянуть список текущего OU's от Active Directory, для которого я смотрел на некоторый пример кода онлайн когда-то, но O, кажется, не могут заставить это работать.
string defaultNamingContext;
DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");
defaultNamingContext = rootDSE.Properties["defaultNamingContext"].Value.ToString();
DirectorySearcher ouSearch = new DirectorySearcher(rootDSE, "(objectClass=organizationalUnit)",
null, SearchScope.Subtree);
MessageBox.Show(rootDSE.ToString());
try
{
SearchResultCollection collectedResult = ouSearch.FindAll();
foreach (SearchResult temp in collectedResult)
{
comboBox1.Items.Add(temp.Properties["name"][0]);
DirectoryEntry ou = temp.GetDirectoryEntry();
}
Ошибка, которую я получаю, является Там поставщиком, не поддерживает поиск и не может искать LDAP://RootDSE Никакие Идеи? для каждого из тех возвращенных результатов поиска я хочу добавить их к полю комбинированного списка. (не должно быть слишком твердым),
Вы не можете искать на уровне LDAP://RootDSE
- это просто "информационный" адрес с некоторыми материалами. На самом деле он не представляет никакого местоположения в вашем каталоге. Сначала вам нужно привязаться к контексту именования по умолчанию:
string defaultNamingContext;
DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");
defaultNamingContext = rootDSE.Properties["defaultNamingContext"].Value.ToString();
DirectoryEntry default = new DirectoryEntry("LDAP://" + defaultNamingContext);
DirectorySearcher ouSearch = new DirectorySearcher(default,
"(objectClass=organizationalUnit)",
null, SearchScope.Subtree);
Как только вы это сделаете, вы должны быть в порядке, чтобы найти все OU в вашем домене.
И чтобы ускорить поиск, я бы рекомендовал не использовать objectClass
- это свойство не индексируется в AD. Вместо этого используйте objectCategory
, которое индексируется:
DirectorySearcher ouSearch = new DirectorySearcher(default,
"(objectCategory=Organizational-Unit)",
null, SearchScope.Subtree);
UPDATE:
Я обнаружил, что этот фильтр неверен - несмотря на то, что objectCategory
отображается как CN=Organizational-Unit,......
в ADSI браузере, вам нужно указать objectCategory=organizationalUnit
в поиске, чтобы он был успешным:
DirectorySearcher ouSearch = new DirectorySearcher(default,
"(objectCategory=organizationalUnit)",
null, SearchScope.Subtree);