У меня в настоящее время есть этот код,
string defaultNamingContext;
DirectoryEntry rootDSE = new DirectoryEntry("LDAP://RootDSE");
defaultNamingContext = rootDSE.Properties["defaultNamingContext"].Value.ToString();
rootDSE = new DirectoryEntry("LDAP://" + defaultNamingContext);
//DirectoryEntry domain = new DirectoryEntry((string)"LDAP://" + defaultNamingContext);
DirectorySearcher ouSearch = new DirectorySearcher(rootDSE,"(objectCategory=Organizational-Unit)",
null, SearchScope.Subtree);
MessageBox.Show(rootDSE.Path.ToString());
try
{
SearchResultCollection collectedResult = ouSearch.FindAll();
foreach (SearchResult temp in collectedResult)
{
comboBox1.Items.Add(temp.Properties["name"][0]);
DirectoryEntry ou = temp.GetDirectoryEntry();
}
}
То, когда я использую отладчик i, видит, что rootDSE.Path, заражают указывающий на правильное место, в этом случае DC=g-t-p,DC=Local
но искатель каталога не находит результатов. Кто-либо может помочь?
Стивен - у меня плохо - почему-то поиск с использованием objectCategory не работает.
Несмотря на то, что objectCategory
отображается как CN = Organizational-Unit
, для поиска вам все равно нужно использовать то же значение, что и для objectClass:
Поэтому попробуйте используйте фильтр (objectCategory = organizationUnit)
- это определенно работает для меня!
ОБНОВЛЕНИЕ: , чтобы получить некоторые свойства в результатах поиска (чтобы отображать их в поле со списком), вам необходимо включить их при создании DirectorySearcher:
DirectorySearcher ouSearch = new DirectorySearcher(rootDSE);
ouSearch.Filter = "(objectCategory=Organizational-Unit)";
ouSearch.SearchScope = SearchScope.Subtree;
ouSearch.PropertiesToLoad.Add("name");
// add more properties if you want to ...
При этом вам определенно следует иметь возможность получить temp.Properties ["name"] [0]
и вставить его в список элементов поля со списком.
Я действительно не понимаю, что вам нужно в строке
DirectoryEntry ou = temp.GetDirectoryEntry();
после получения свойства name .....