2010-05-25 26 views
5

tengo este código en la actualidad,Active Directory Lista de 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(); 
      } 
     } 

Cuando utilizo el depurador veo que rootDSE.Path es de hecho que apunta al lugar correcto, en este caso DC=g-t-p,DC=Local pero el buscador directorio doesn' t encuentra cualquier resultado. ¿Alguien puede ayudar?

Respuesta

7

Stephen - mi mal - por alguna razón, la búsqueda utilizando objectCategory no funciona.

pesar de que el objectCategory se muestra como CN=Organizational-Unit, para buscar, usted todavía tiene que usar el mismo valor que para el objectClass:

Así que trate de utilizar el filtro (objectCategory=organizationalUnit) - que definitivamente funciona para mí!

ACTUALIZACIÓN: con el fin de obtener algunas propiedades en su búsqueda (con el fin de mostrarlos en el cuadro combinado), debe incluir aquellas en las que se crea el 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 esta , definitivamente deberías ser capaz de tomar el temp.Properties["name"][0] y pegarlo en la lista de elementos del cuadro combinado.

Realmente no veo lo que necesita la línea

DirectoryEntry ou = temp.GetDirectoryEntry(); 

después de agarrar la propiedad de nombre .....

+1

OMG algo tan simple, bebiendo yo para no tratar de que, después de mis pocos horas de codificación de prueba y error: @ No creo que sea el más productivo que he sido recientemente ... –

+0

¿Parece que estoy recopilando los objetos de búsqueda correctamente para agregarlos a los elementos del cuadro combinado? –

+1

+1 Después de haberlo probado y de escribir mi respuesta, llegué a la misma conclusión. –

Cuestiones relacionadas