2011-07-19 49 views
7

我需要修改已添加到模式的自定義屬性,但是以所有用戶爲基礎。該屬性是一個MD5哈希,我已經存儲爲一個公共變量。我正在嘗試獲取指定OU中的所有用戶的列表,以便在列表框中列出,以便您可以選擇所有用戶或單個用戶來應用這些值。在Active Directory中查詢OU中的所有用戶並將用戶名輸出到列表框

這裏是我的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

什麼問題? –

+0

我該如何去獲取所有的用戶,而不僅僅是特定的用戶,而是將所有的信息都放入一個數組或者可以在列表框中顯示的東西 –

回答

10

如果你在.NET 3.5或更高版本,可以使用PrincipalSearcher和「查詢通過例如」主要做你的搜索:

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

如果您還沒有 - 絕對看MSDN文章Managing Directory Security Principals in the .NET Framework 3.5這很好地說明如何使新功能的最佳使用System.DirectoryServices.AccountManagement

您可以指定UserPrincipal上的任何屬性,並將它們用作您的PrincipalSearcher的「查詢範例」。

+0

所以,「ctx」是我搜索的值用戶爲?另外,我怎麼能找到一個數組中找到的值,或者我可以放入一個列表框?謝謝 –

+0

@Jeff Clay:更新了我的回覆 - 您基本上需要爲容器中找到的每個用戶提供一些信息(我選擇了「DisplayName」),例如:一個'列表',然後將其綁定到您的列表框 –

+0

真棒,謝謝。還有一件事...我如何去綁定我的AD服務器來查詢這些信息? –

相關問題