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

C# 運用 ADSI 建立網路電腦樹狀結構圖

     編輯:關於C#

ADSI 與 System.DirectoryServices 簡介

ADSI (Active Directory Service Interfaces) 為 Windows 網路資源的統一存取介面,以階層樹狀結構呈現網域、工作群組、電腦、印表機等資源。.NET 提供 System.DirectoryServices 命名空間,核心類別:

  • DirectoryEntry:代表樹狀結構中的節點,可繫結至特定路徑(如 WinNT://、LDAP://)
  • DirectorySearcher:執行查詢搜尋

支援的服務提供者

提供者路徑前綴
Windows NT (網域/工作群組)WinNT://
LDAP (Active Directory)LDAP://
Novell NDSNDS://
Novell NetWare 3.xNWCOMPAT://

本文使用 WinNT:// 列舉網域/工作群組及其下的電腦。

系統需求

  • 用戶端需安裝 ADSI 2.5+(Windows 2000 內建,Win98/NT4 需另裝)
  • 目標電腦作業系統需為 Windows 2000 以上才會出現在樹狀圖中

實作步驟

1. 介面設計

  • TreeView (Name: treeView1) - 顯示樹狀結構
  • Button (Text: "獲取", Click 事件) - 觸發載入

設計介面

2. 宣告根節點 DirectoryEntry

using System.DirectoryServices;

private DirectoryEntry rootEntry = new DirectoryEntry("WinNT:");

3. 按鈕點擊:載入網域/工作群組 (第一層)

private void btnLoad_Click(object sender, EventArgs e)
{
    treeView1.Nodes.Clear();
    foreach (DirectoryEntry child in rootEntry.Children)
    {
        TreeNode node = new TreeNode(child.Name);
        treeView1.Nodes.Add(node);
    }
}

4. TreeView DoubleClick:展開並載入該網域下的電腦 (第二層)

private void treeView1_DoubleClick(object sender, EventArgs e)
{
    if (treeView1.SelectedNode == null) return;

    string domainName = treeView1.SelectedNode.Text;
    treeView1.SelectedNode.Nodes.Clear();

    // 繫結至該網域路徑
    var domainEntry = new DirectoryEntry($"WinNT://{domainName}");

    foreach (DirectoryEntry child in domainEntry.Children)
    {
        // SchemaClassName 為 "Computer" 者才是電腦
        if (string.Equals(child.SchemaClassName, "Computer", StringComparison.OrdinalIgnoreCase))
        {
            TreeNode pcNode = new TreeNode(child.Name);
            treeView1.SelectedNode.Nodes.Add(pcNode);
        }
    }
    treeView1.SelectedNode.Expand();
}

執行結果

點擊「獲取」顯示網域/工作群組 → 雙擊節點展開顯示該網域下所有電腦。

執行畫面

限制與注意事項

  • ❌ 無法顯示 Windows 98/NT4 等未安裝 ADSI 2.5 的電腦
  • ❌ 僅能列舉執行程式電腦所在的網段/VLAN
  • ❌ 跨網域、多樹系環境需改用 LDAP 提供者 (LDAP://)
  • ✅ 程式碼簡潔,善用 DirectoryEntry.Children 列舉與 SchemaClassName 過濾

延伸應用

可進一步整合 DirectorySearcher 進行條件查詢(如依作業系統、最後登入時間過濾),或結合 WMI 查詢更詳細硬體資訊。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved