2010-05-25 6 views
5

Mam ten kod ObecnieActive Directory Lista OU na

 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(); 
      } 
     } 

podczas korzystania z debugera widzę, że jest to rzeczywiście rootDSE.Path wskazujące na właściwym miejscu, w tym przypadku DC=g-t-p,DC=Local ale poszukiwacz katalog robi” t znaleźć żadnych wyników. Czy ktoś może pomóc?

Odpowiedz

7

Stephen - moje złe - z jakiegoś powodu wyszukiwanie za pomocą objectCategory nie działa.

Choć objectCategory jest wyświetlany jako CN=Organizational-Unit, do wyszukiwania, nadal trzeba używać tej samej wartości jak dla objectClass:

Więc spróbuj użyć filtru (objectCategory=organizationalUnit) - że na pewno działa na mnie!

UPDATE: w celu uzyskania pewnych właściwości w wyniku wyszukiwania (aby wyświetlić je w polu kombi), trzeba obejmują te podczas tworzenia 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 ... 

Z tego , zdecydowanie powinieneś być w stanie pobrać temp.Properties["name"][0] i umieścić go na liście przedmiotów w comboboxie.

naprawdę nie zobaczyć, co trzeba linię

DirectoryEntry ou = temp.GetDirectoryEntry(); 

po chwytając właściwość name .....

+1

OMG coś tak proste, kopać siebie, nie próbując, że po moim mało godziny próbnego i błędnego kodowania: @ Nie sądzę, że jest to najbardziej produktywny ostatnio ... –

+0

Czy wygląda na to, że zbieram obiekty wyszukiwania poprawnie, aby dodać je do pozycji w polu Kombi? –

+1

+1 Po przetestowaniu go i napisaniu odpowiedzi, doszedłem do tego samego wniosku. –