2011-07-19 14 views
7

Necesito modificar un atributo personalizado que hemos agregado al esquema, pero para todos los usuarios. El atributo es un hash MD5, que ya estoy almacenando como una variable pública. Estoy tratando de obtener una lista de todos los usuarios dentro de unidades organizativas especificadas para que aparezcan en el cuadro de lista para que pueda seleccionar todos los usuarios o usuarios individuales a los que se aplicarán los valores.consulta a todos los usuarios en una unidad organizativa dentro de Active Directory y nombres de usuario de salida a listbox

Aquí está mi código actual para Form1.cs

using System; 
using System.Collections.Generic; 
using System.ComponentModel; 
using System.Data; 
using System.Drawing; 
using System.Linq; 
using System.Text; 
using System.Windows.Forms; 
using System.Security.Cryptography; 
using System.DirectoryServices; 



namespace WindowsFormsApplication1 
{ 
    public partial class Form1 : Form 
    { 

     String Password; 

     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void Form1_Load(object sender, EventArgs e) 
     { 

     } 

     private void textBox1_TextChanged(object sender, EventArgs e) 
     { 
      Password = textBox1.Text; 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 

      System.Security.Cryptography.MD5CryptoServiceProvider x = new System.Security.Cryptography.MD5CryptoServiceProvider(); 
      byte[] bs = System.Text.Encoding.UTF8.GetBytes(Password); 
      bs = x.ComputeHash(bs); 
      System.Text.StringBuilder s = new System.Text.StringBuilder(); 
      foreach (byte b in bs) 
      { 
       s.Append(b.ToString("x2").ToLower()); 
      } 
      Password = s.ToString(); 

      textBox2.Text = Password; 


     } 

     private void button2_Click(object sender, EventArgs e) 
     { 

     } 

     private void textBox2_TextChanged(object sender, EventArgs e) 
     { 

     } 

     private void button3_Click(object sender, EventArgs e) 
     { 

     } 

     private void listBox1_SelectedIndexChanged(object sender, EventArgs e) 
     { 

     } 
    } 
} 
+0

¿Cuál es la pregunta? –

+0

cómo hago para obtener todos los usuarios, no solo los específicos, sino todo y obtener esa información en una matriz o algo que se puede mostrar dentro del cuadro de lista –

Respuesta

10

Si estás en .NET 3.5 o posterior, puede utilizar un PrincipalSearcher y un director "de consulta por ejemplo" para hacer su búsqueda :

// List of strings for your names 
List<string> allUsers = new List<string>(); 

// create your domain context and define the OU container to search in 
PrincipalContext ctx = new PrincipalContext(ContextType.Domain, "DOMAINNAME", 
              "OU=SomeOU,dc=YourCompany,dc=com"); 

// define a "query-by-example" principal - here, we search for a UserPrincipal (user) 
UserPrincipal qbeUser = new UserPrincipal(ctx); 

// create your principal searcher passing in the QBE principal  
PrincipalSearcher srch = new PrincipalSearcher(qbeUser); 

// find all matches 
foreach(var found in srch.FindAll()) 
{ 
    // do whatever here - "found" is of type "Principal" - it could be user, group, computer.....   
    allUsers.Add(found.DisplayName); 
} 

Si todavía no lo ha - absolutamente leer el artículo de MSDN Managing Directory Security Principals in the .NET Framework 3.5 que muestra muy bien cómo hacer el mejor uso de las nuevas características de System.DirectoryServices.AccountManagement

Puede especificar cualquiera de las propiedades en el UserPrincipal y usarlas como "consulta por ejemplo" para su PrincipalSearcher.

+0

, entonces, es "ctx" el valor por el que busco el usuarios para? también, ¿cómo puedo obtener los valores encontrados en una matriz o algo que puedo poner en una lista? gracias –

+0

@Jeff Clay: actualicé mi respuesta, básicamente necesitas poner algo de información (elegí el "DisplayName") para cada usuario que se encuentra en tu contenedor, por ej. a 'List ' y luego vincular esto a su listbox –

+0

Awesome, thanks. Una cosa más ... ¿Cómo hago para enlazar con mi servidor AD para poder consultar esta información? –

Cuestiones relacionadas