2010-05-25 39 views
5

tôi có hiện mã này,Active Directory Danh sách OU của

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

Khi tôi sử dụng trình gỡ lỗi tôi có thể thấy rootDSE.Path đó là Infact trỏ đến đúng nơi, trong trường hợp này DC=g-t-p,DC=Local nhưng người tìm kiếm thư mục doesn' t tìm thấy bất kỳ kết quả nào. Có ai giúp được không?

Trả lời

7

Stephen - xấu của tôi - vì một lý do nào đó, tìm kiếm bằng cách sử dụng objectCategory không hoạt động.

Mặc dù objectCategory được hiển thị như CN=Organizational-Unit, để tìm kiếm, bạn vẫn cần phải sử dụng cùng một giá trị như đối với objectClass:

Vì vậy, cố gắng sử dụng các bộ lọc (objectCategory=organizationalUnit) - đó chắc chắn làm việc cho tôi!

UPDATE: để có được một số tài sản trong kết quả tìm kiếm của bạn (để hiển thị chúng trong combo box), bạn cần phải bao gồm những khi bạn tạo 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 ... 

Với điều này , bạn chắc chắn sẽ có thể lấy temp.Properties["name"][0] và dán nó vào danh sách các mục của combobox.

Tôi không thực sự nhìn thấy những gì bạn cần dòng

DirectoryEntry ou = temp.GetDirectoryEntry(); 

sau khi grabbing các property name .....

+1

OMG cái gì đó đơn giản như vậy, đá bản thân mình vì đã không cố gắng đó, sau vài tôi số giờ dùng thử và mã hóa lỗi: @ Tôi không nghĩ sản phẩm hiệu quả nhất của tôi gần đây ... –

+0

Có vẻ như tôi đang thu thập các đối tượng tìm kiếm một cách chính xác để thêm chúng vào các mục của hộp Combo không? –

+1

+1 Sau khi tự mình thử nghiệm và chuẩn bị viết câu trả lời, tôi đã đi đến kết luận chính xác. –

Các vấn đề liên quan