C#基礎知識之DirectorySearcher 類


活動目錄(Active Directory)是從一個數據存儲開始的,它采用了類似Exchange Server的數據存儲,所以被稱為Extensible Storage Service (ESS)。其特點是不需要事先定義數據庫的參數,可以做到動態地增長,性能非常優良。這個數據存儲之上已建立索引的,可以方便快速地搜索和定位。活動目錄的分區是(Domain),一個域可以存儲上百萬的對象。域之間還有層次關系,可以建立域樹和域森林,無限地擴展。 

活動目錄充分體現了微軟產品的”ICE”,即集成性(Integration),深入性(Comprehensive),和易用性(Ease of Use)等優點。活動目錄是一個完全可擴展,可伸縮的目錄服務,既能滿足商業ISP的需要,又能滿足企業內部網和外聯網的需要。 

在.Net環境下操縱活動目錄非常容易,其中提供了很多封裝好的類用來操縱活動目錄,這些類都存放在System.DirectoryServicess名稱空間里。本文簡要介紹一下如何使用這些DirectorySearcher類來讀取活動目錄中的信息。

 

  

 

 

 

using (DirectoryEntry entry = new DirectoryEntry())
{
    //entry.Path ="LDAP://域";
    DirectorySearcher mySearcher = new DirectorySearcher(entry);
    mySearcher.SearchScope = SearchScope.Subtree;
    mySearcher.ServerTimeLimit = TimeSpan.FromSeconds(1200);
    //mySearcher.ClientTimeout = TimeSpan.FromSeconds(1000);
    //默認的搜索結果最大數為1000,通過設置pagesize 屬性來解決
    mySearcher.PageSize = 10000;
   //mySearcher.ServerTimeLimit = 500;
   //mySearcher.SizeLimit = 10000;
   mySearcher.Filter = "(&(objectClass=user)(|(sAMAccountName=T*)(sAMAccountName=A*)(sAMAccountName=M*)(sAMAccountName=K*)(sAMAccountName=Z*)))";
   //mySearcher.Filter = "(objectClass=user)";
   string enno = string.Empty;//工號
   string enemail = string.Empty;//郵箱
   foreach (SearchResult resEnt in mySearcher.FindAll())
   {
       enno = string.Empty;//工號
       enemail = string.Empty;//郵箱
       try
       {
           DirectoryEntry user = resEnt.GetDirectoryEntry();
           if (user.Properties.Contains("sAMAccountName"))
           {
               enno = user.Properties["sAMAccountName"][0].ToString();
           }
           if (user.Properties.Contains("mail"))
           {
               enemail = user.Properties["mail"][0].ToString();
           }
        }
        finally { }
    }
}   
View Code

 

程序注解:

◆程序開始,實例化了一個DirectoryEntry類,其構造函數的參數是""; ◆然后又實例化了一個C# DirectorySearcher類,用來查詢DirectoryEntry域中活動目錄中的信息 ◆C# DirectorySearcher類的Filter屬性用來設置查詢的過濾條件,一般有以下三種: 1. objectClass=organizationalUnit 查詢條件是所有的組織單元(OU) 2. objectClass=group 查詢條件是所有的組(GROUP) 3. objectClass=user 查詢條件是所有的用戶(USER) 當然還可以設置其他的過濾條件,而且可以使用邏輯運算符,詳情請參加MSDN ◆C# DirectorySearcher類的Findall方法用來遞歸的查找所有符合條件的對象。其返回結果是一個SearchResult類型的對象,這是一個集合類型。 ◆用Foreach語句訪問集合中的所有對象,獲得對象的信息。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM