首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> 關於.NET

.NET 操作 Active Directory 完整入門指南

     編輯:關於.NET

Windows 2000 Server 引入的 Active Directory (AD) 採用可擴充儲存引擎 (ESS),支援百萬級物件、域樹與森林架構。在 .NET 中,System.DirectoryServices 命名空間提供豐富封裝類別,讓 AD 操作變得簡單直觀。本文以主控台應用程式為例,示範查詢組織單位 (OU)、群組與使用者的基礎操作流程。

環境準備

  1. 建立主控台專案
  2. 加入參考:System.DirectoryServices.dll
  3. 引入命名空間:using System.DirectoryServices;

核心類別架構

類別用途
DirectoryEntry代表 AD 中的節點(根目錄、OU、使用者等),建構子傳入 LDAP 路徑
DirectorySearcher執行查詢,設定 Filter 條件,呼叫 FindAll() 或 FindOne()
SearchResult查詢結果項目,透過 GetDirectoryEntry() 取得底層節點屬性

常用 LDAP 過濾條件

(objectClass=organizationalUnit)  // 所有 OU
(objectClass=group)                // 所有群組
(objectClass=user)                 // 所有使用者
(&(objectClass=user)(cn=admin*))  // 組合條件:使用者且 CN 以 admin 開頭

完整查詢範例:列出所有 OU

public static void GetAllOU() {
    DirectoryEntry entry = new DirectoryEntry("LDAP://szcs"); // szcs 為域名
    DirectorySearcher searcher = new DirectorySearcher(entry);
    searcher.Filter = "(objectClass=organizationalUnit)";
    
    foreach (SearchResult result in searcher.FindAll()) {
        DirectoryEntry ou = result.GetDirectoryEntry();
        Console.WriteLine($"OU Name: {ou.Name}");
        // 可進一步讀取屬性:ou.Properties["description"].Value 等
    }
}

關鍵步驟解析

  1. 建立 DirectoryEntry:LDAP 路徑格式 LDAP://<域名/伺服器>,亦可指定 OU 完整路徑如 LDAP://OU=Sales,DC=corp,DC=com
  2. 設定 Filter:採用 RFC 2254 語法,支援 & (AND)、| (OR)、! (NOT)、* (萬用字元)
  3. 執行查詢:FindAll() 遞歸搜尋整棵樹,回傳 SearchResultCollection
  4. 處理結果:逐項取得 DirectoryEntry,讀取 Name、Path、自訂屬性等

進階操作方向

  • 新增/修改/刪除:取得 DirectoryEntry 後操作 Properties 集合,呼叫 CommitChanges()
  • 認證綁定:new DirectoryEntry(path, username, password, AuthenticationTypes.Secure)
  • 大量操作效能:使用 DirectorySearcher.PageSize 分頁、PropertyNamesOnly 僅取屬性名稱
  • 跨域查詢:指定 Global Catalog LDAP://GC://forest.root 並設定 SearchScope.Subtree

常見問題排查

  • 權限不足:確認執行身分具備 AD 讀取權限,或使用明確認證綁定
  • 找不到物件:檢查 LDAP 路徑拼寫、域名正確性、防火牆阻擋 389/636 埠
  • 效能不佳:縮小搜尋範圍(指定 OU 而非根目錄)、設定 SizeLimit、啟用分頁
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved