2010-05-25 34 views
5

ho questo codice attualmente,Active Directory List di OU

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

Quando uso il debugger vedo che rootDSE.Path è infatti che punta al posto giusto, in questo caso DC=g-t-p,DC=Local ma il ricercatore directory doesn' trovare risultati. Qualcuno può aiutare?

risposta

7

Stephen - my bad - per qualche motivo, la ricerca utilizzando objectCategory non funziona.

Anche se il objectCategory viene visualizzato come CN=Organizational-Unit, per la ricerca, è ancora necessario utilizzare lo stesso valore per l'objectClass:

Così tenta di utilizzare il filtro (objectCategory=organizationalUnit) - che sicuramente funziona per me!

UPDATE: al fine di ottenere alcune proprietà nel risultato di ricerca (al fine di visualizzarli nella casella combinata), è necessario includere quelli in cui si crea il 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 ... 

Con questa , dovresti essere in grado di afferrare lo temp.Properties["name"][0] e incollarlo nell'elenco degli elementi della casella combinata.

io non vedo proprio che cosa avete bisogno la linea

DirectoryEntry ou = temp.GetDirectoryEntry(); 

dopo aver afferrato la proprietà del nome .....

+1

OMG una cosa così semplice, io stesso a calci per non provare che, dopo la mia poche ore di codifica per tentativi ed errori: @ Non penso che sia il più produttivo di recente ... –

+0

Sembra che sto raccogliendo correttamente gli oggetti di ricerca per aggiungerli agli oggetti della casella combinata? –

+1

+1 Dopo averlo provato io stesso e per scrivere la mia risposta, sono arrivato alla stessa esatta conclusione. –

Problemi correlati