WMI (Windows Management Instrumentation) 是微軟實作的 WBEM (Web-Based Enterprise Management) 標準,提供統一介面查詢與管理系統硬體、軟體、網路設定等資源。Windows 2000 內建,NT 4.0 需另裝核心元件。
核心服務程式:WinMgmt.exe(位於 System32\Wbem),透過「組件服務」或「服務」管理啟停與權限。
System.Management)| 類別 | 用途 |
|---|---|
ConnectionOptions | 連線認證參數(使用者、密碼、授權、地區) |
ManagementScope | 代表連線範圍(機器 + 命名空間,如 \\Server\root\cimv2) |
ObjectQuery / SelectQuery | WQL 查詢字串封裝(類 SQL 語法) |
ManagementObjectSearcher | 執行查詢,回傳 ManagementObjectCollection |
ManagementObjectCollection | 查詢結果集合,可迭代 |
ManagementObject | 單一管理物件,可讀取屬性、呼叫方法、異動資料 |
var options = new ConnectionOptions
{
Username = "domain\\user",
Password = "password",
Authority = "ntlmdomain:DOMAIN" // 選填
};
var scope = new ManagementScope(@"\\RemotePC\root\cimv2", options);
// 隱含呼叫 Connect()
var scope = new ManagementScope(@"\\RemotePC\root\cimv2");
scope.Options = options;
scope.Connect(); // 明確連線,可 try-catch
var query = new SelectQuery("SELECT * FROM Win32_LogicalDisk");
using (var searcher = new ManagementObjectSearcher(scope, query))
{
foreach (ManagementObject disk in searcher.Get())
{
Console.WriteLine($"磁碟:{disk["DeviceID"]}");
Console.WriteLine($" 檔案系統:{disk["FileSystem"]}");
Console.WriteLine($" 總大小:{Convert.ToInt64(disk["Size"]) / 1024 / 1024 / 1024} GB");
Console.WriteLine($" 可用空間:{Convert.ToInt64(disk["FreeSpace"]) / 1024 / 1024 / 1024} GB");
}
}
SELECT * FROM Win32_ProcessSELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = TRUESELECT * FROM Win32_Service WHERE State = 'Running'SELECT * FROM Win32_BIOSvar processClass = new ManagementClass(scope, new ManagementPath("Win32_Process"), null);
var inParams = processClass.GetMethodParameters("Create");
inParams["CommandLine"] = "notepad.exe";
var outParams = processClass.InvokeMethod("Create", inParams, null);
Console.WriteLine($"Process ID:{outParams["ProcessId"]},回傳碼:{outParams["ReturnValue"]}");
135、445 及 DCOM 動態埠。SELECT Name, Size FROM ...),避免 SELECT * 造成網路與序列化負擔。EnumerationOptions 設定 ReturnImmediately、BlockSize 進行分頁/非同步列舉。ManagementObject 實作 IDisposable,請用 using 確保釋放 COM 資源。ManagementScope 連線物件,減少重複握手。WMI 是 Windows 系統管理的瑞士刀,System.Management 讓 C# 開發者能以強型別、物件導向方式存取豐富的系統資訊。掌握連線、查詢、呼叫方法三大核心流程,即可開發出強大的網路資產管理、監控與自動化部署工具。