WMI支援網路域中的計算甲查詢。在.NET下也有多種實現方式。
首先從技術上講,每當進行一次WMI查詢(即使直接使用ManagementObjectSearcher提供的快捷API方法),內部也會有WMI對於資訊員電腦的串連過程。System.Management命名空間中有特定的類來完成此類需求。ManagementPath代表一個抽象的WMI路徑,這個路徑可以是WQL查詢也可以WMI命名空間路徑(當然“WQL中可以加入WMI命名空間路徑”這樣想也是可以的)。而ManagementScope就是WMI路徑與串連選項的結合,可以代表一個串連。
比如串連Windows網路域中一個名叫“Mgen-PC”電腦的WMI基本命名空間(root\cimv2):
//注意:引用System.Management.dll 和 using System.Management;
var mgrPath = new ManagementPath(@"\\Mgen-PC\root\cimv2");
var mgrScope = new ManagementScope(mgrPath);
//嘗試串連
mgrScope.Connect();
//輸出是否串連
Console.WriteLine(mgrScope.IsConnected);
//輸出伺服器(對應電腦)名稱
Console.WriteLine(mgrPath.Server);
//輸出WMI命名空間
Console.WriteLine(mgrPath.NamespacePath);
輸出:
True
Mgen-PC
root\cimv2
有了ManagementScope,可以聯通WQL查詢對象來建立ManagementObjectSearcher最後執行WMI查詢:
//注意:引用System.Management.dll 和 using System.Management;
var mgrPath = new ManagementPath(@"\\Mgen-PC\root\cimv2");
var mgrScope = new ManagementScope(mgrPath);
var query = new ObjectQuery("SELECT * FROM Win32_Process");
//用ManagementScope和ObjectQuery建立ManagementObjectSearcher
var searcher = new ManagementObjectSearcher(mgrScope, query);
//查詢
foreach (ManagementBaseObject bobj in searcher.Get())
Console.WriteLine(bobj["Name"]);
當然在實際上可以用ManagementObjectSearcher提供的更快捷的方法,兩個字串,分別代表ManagementScope和ObjectQuery:
var searcher = new ManagementObjectSearcher(@"\\Mgen-PC\root\cimv2", "SELECT * FROM Win32_Process");