2011-07-19 3 views
7

Potrzebuję zmodyfikować niestandardowy atrybut dodany do schematu, ale dla wszystkich użytkowników. Atrybut to skrót MD5, który już przechowuję jako publiczna zmienna. Próbuję wyświetlić listę wszystkich użytkowników w określonej jednostce organizacyjnej, która ma być wyświetlana w polu listy, aby można było wybrać wszystkich użytkowników lub poszczególnych użytkowników, dla których zastosowano wartości.zapytanie wszystkich użytkowników w jednostce organizacyjnej w usłudze Active Directory i wyprowadzanie nazw użytkowników do listy list

Tu jest mój bieżący kod 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

Na czym polega pytanie? –

+0

jak mogę uzyskać wszystkich użytkowników, nie tylko konkretne, ale wszystkie i uzyskać te informacje w tablicy lub coś, co może być wyświetlane w polu listy –

Odpowiedz

10

Jeśli jesteś na .NET 3.5 lub nowszy, można użyć PrincipalSearcher i „query-przez-przykład” główny zrobić swoje poszukiwania :

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

Jeśli nie masz jeszcze - absolutnie przeczytać artykuł MSDN Managing Directory Security Principals in the .NET Framework 3.5 który pokazuje ładnie jak najlepsze wykorzystanie nowych funkcji w System.DirectoryServices.AccountManagement

Możesz określić dowolną z właściwości w UserPrincipal i użyć ich jako "zapytanie-przykład" dla twojego PrincipalSearcher.

+0

tak, jest "ctx" wartość, o którą przeszukuję użytkownicy dla? także, jak mogę uzyskać wartości znalezione w tablicy lub coś, co mogę umieścić w skrzynce listy? dzięki –

+0

@Jeff Clay: zaktualizowałem moją odpowiedź - w zasadzie musisz podać trochę informacji (wybrałem "DisplayName") dla każdego użytkownika znalezionego w twoim kontenerze na przykład a 'List ' a następnie zwiąż to do twojego listbox –

+0

Awesome, thanks. Jeszcze jedno ... W jaki sposób uzyskać powiązanie z moim serwerem AD, aby móc zapytać o te informacje? –