2010-05-25 10 views
5

Je le code actuellement,Liste Active Directory UO

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

Quand j'utilise le débogueur je peux voir que rootDSE.Path est enfait pointant vers le bon endroit, dans ce cas DC=g-t-p,DC=Local mais le chercheur du répertoire n » t trouver des résultats. Quelqu'un peut-il aider?

Répondre

7

Stephen - mon mauvais - pour une raison quelconque, la recherche en utilisant objectCategory ne fonctionne pas.

Même si le objectCategory est affiché comme CN=Organizational-Unit, pour la recherche, vous devez toujours utiliser la même valeur que pour le objectClass:

Donc, essayez d'utiliser le filtre (objectCategory=organizationalUnit) - qui fonctionne vraiment pour moi!

MISE À JOUR: afin d'obtenir des propriétés dans le résultat de votre recherche (afin de les afficher dans la zone de liste déroulante), vous devez inclure ceux lorsque vous créez le 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 ... 

Avec cette , vous devriez certainement être en mesure de saisir le temp.Properties["name"][0] et le coller dans la liste des éléments de la liste déroulante.

Je ne vois pas vraiment ce que vous avez besoin de la ligne

DirectoryEntry ou = temp.GetDirectoryEntry(); 

après avoir saisi la propriété du nom .....

+1

OMG quelque chose de si simple, me coups de pied pour ne pas essayer que, après mes quelques heures de codage tâtonnement: @ Je ne pense pas que ce que je suis récemment le plus productif ... –

+0

Est-ce que ça ressemble Je collecte la recherche des objets correctement pour les ajouter aux éléments de boîte Combo? –

+1

+1 Après l'avoir testé moi-même et sur le point d'écrire ma réponse, j'en suis arrivé à la même conclusion. –