WMI是Windows Management Instrumentation的簡稱,即:視窗管理規范。在 Windows 2000或以後的版本中均安裝得有,NT4.0則需要安裝WMI的核心組件。通 過WMI可以獲取遠程計算機的各種數據信息,控制遠程計算機的各種行為,而這就 像操作本地機一樣方便、簡單。
一.WMI簡介
WMI從根本上說應該為一種服務,並且對於本地不同的用戶,WMI所有的權限也 不一樣。計算機超級用戶可以為計算機中的每一個用戶,設定不同的WMI權限。在 默認狀態下,超級用戶擁有WMI的一切權限。提供WMI服務是通過程序 "WinMgmt.exe"來實現的。可以從"System32\Wbem"目錄中 找到這個文件。
既然是服務,計算機使用者就可以享受這種服務,同樣也可以關閉這種服務。 具體的操作是:按順序打開【控制面板】|【管理工具】|【組件服務】。WMI服務 在組件服務中的顯示名稱為"Windows Management Instrumentation" 。具體如下圖01所示:
圖01:組件服務窗口
選中【名稱】欄中"Windows Management Instrumentation",點擊 鼠標右鍵,在彈出的菜單中,選擇【屬性】,在【啟動類型】選擇框中選擇 "已禁用",然後在單擊【停止】按鈕,這樣本地的WMI服務也就被關閉 了。此時所有本地和遠程的WMI調用均為非法。下圖為關閉WMI服務後的界面:
關閉WMI服務
計算機的超級用戶在默認狀態下擁有WMI的一切權限,並且可以為本地其他用 戶設置WMI權限。具體操作是,按順序打開:【控制面板】|【管理工具】|【計算 機管理】。選中【計算機管理】右邊的【服務和應用程序】中的【WMI控件】。具 體如圖02所示:
圖02:【計算機管理】對話框
點擊鼠標右鍵,在彈出的菜單中,選擇【屬性】。彈出【WMI控件屬性】對話 框中,選擇【安全】頁面。具體如圖03所示:
圖03: 打開WMI安全設置界面
單擊圖9-4中【安全設置】按鈕,彈出【安全設置Root】對話框,通過其中的 【添加】和【刪除】按鈕,可以設定本地有哪些用戶擁有WMI權限,並通過【權限 】選擇欄為每一個用戶設置不同的權限,具體如圖04所示:
圖04:設定本地用戶的WMI權限
通過上圖,也可以發現計算機超級用戶在默認狀態的WMI權限都是允許的,並 且這些權限都是無法刪除的。
二.Visual C#中操作WMI的類庫簡介
.Net FrameWork SDK對WMI提供了全面的支持,.Net FrameWork SDK為Visual C#能夠操作WMI提供了一個專門的命名空間"System.Management"。在 命名空間"System.Management"中提供了大量用以處理和WMI相關的類 、接口和枚舉。
命名空間"System.Management"中的成員是非常復雜的,由於篇幅 所限完全介紹這些成員是不可能的,也是沒有要的。根據我的經驗,認為要了解 、掌握在Visual C#中使用WMI,下面六個類應該是學習的重點,分別是 ConnectionOptions、ManagementScope、ObjectQuery、 ManagementObjectSearcher、ManagementObjectCollection和ManagementObject 。下面就簡單介紹一下六個類:
·ConnectionOptions類
ConnectionOptions類主要的功能是為建立的WMI連接提供所需的所有設置。在 利用WMI對遠程計算機進行操作的時候,首先要進行WMI連接,WMI連接主要是使用 的是ManagementScope 類,成功完成WMI連接就要提供遠程計算機WMI用戶名和口 令。ConnectionOptions類可以通過其屬性來提供這些信息。表01是 ConnectionOptions類的一些主要屬性及其簡單的說明。
屬性 說明 Authority 獲取或設置將用於驗證指定用戶的權利。 Locale 獲取或設置將用於連接操作的區域設置。 Password 提供用於WMI連接操作的口令。 Username 提供用於WMI連接操作的用戶名。
表01:ConnectionOptions類常用屬性及其說明
其中最常用的屬性是Password和Username。
·ManagementScope 類
通過ManagementScope類能夠建立和遠程計算機(或者本地計算機)的WMI連接 ,表示管理可操作范圍。創建WMI連接可以通過二種方法:
( 1 ) . 利用構造函數,當使用下面構造函數初始化ManagementScope 類實例 ,同時也就建立了WMI連接,具體如下:
public ManagementScope (
string path ,
ConnectionOptions options
) ;
參數:
path ManagementScope的服務器和命名空間。
options 包含有關連接的選項的 ConnectionOptions。
使用構造函數是有風險的,因為如果不能根據提供的選項建立WMI連接,程序 會程序異常,出現錯誤。
下列代碼是利用此構造函數構建建立ManagementScope實例,並建立於遠程計 算機majinhu的WMI連接:
System.Management.ConnectionOptions Conn = new ConnectionOptions ( ) ;
//設定用於WMI連接操作的用戶名
Conn.Username = "WMI用戶名";
//設定用戶的口令
Conn.Password = "此用戶名對應口令";
System.Management.ManagementScope Ms = new ManagementScope ("\\\\majinhu\\root\\cimv2", Conn ) ;
( 2 ) . 利用ManagementScope中提供的Connect方法:
ManagementScope中的成員是非常少的,最常用的方法和屬性各一個:常用屬 性是Options,主要為WMI建立提供參數;常用方法是Connect,通過它可以建立於 遠程計算機的WMI連接。下列是利用Connect方法建立WMI連接的具體代碼:
System.Management.ConnectionOptions Conn = new ConnectionOptions ( ) ;
//設定用於WMI連接操作的用戶名
Conn.Username = "WMI用戶名";
//設定用戶的口令
Conn.Password = "此用戶名對應口令";
System.Management.ManagementScope Ms = new ManagementScope ("\\\\majinhu\\root\\cimv2" ) ;
Ms.Options = Conn ;
Ms.Connect ( ) ;
//建立WMI連接
·ObjectQuery類
ObjectQuery類或其派生類用於在ManagementObjectSearcher中指定查詢。程 序中一般采用查詢字符串來構造ObjectQuery實例。其中的查詢字符串是一種類似 SQL語言的WQL語言。下面的ObjectQuery類構造函數中最常見的一種,具體語法如 下:
public ObjectQuery (
string query
) ;
參數:
query 查詢的字符串
·ManagementObjectSearcher類
ManagementObjectSearcher主要是根據指定的查詢檢索WMI對象的集合。 ManagementObjectSearcher組成成員也非常簡單,其方法Get方法是非常重要的, ManagementObjectSearcher通過Get方法進行WMI查詢,並把得到的結果集合。Get 方法的返回值是一個ManagementObjectCollection實例,它包含匹配指定查詢的 對象。
表02是其ManagementObjectSearcher類的常用屬性及其說明。
屬性 說明 Options 有關如何搜索對象的選項 Query 在搜索器中調用的查詢 Scope 在其中查找對象的范圍
表02:ManagementObjectSearcher類常用屬性及其說明
·ManagementObjectCollection類
ManagementObjectCollection類非常簡單,它主要表示 WMI 實例的不同集合 其中包括命名空間、范圍和查詢觀察程序等。創建ManagementObjectCollection 類沒有構造函數。
·ManagementObject類
ManagementObject類為單個管理對象或類。通過ManagementObject中的方法可 以調用ManagementObject對應的對象,從而執行相應的操作。ManagementObject 類是一個內容豐富的類,表03和表04分別是其常用的屬性和方法。
屬性 說明 ClassPath 對象的類的路徑。 Options 檢索對象時要使用的其他信息。 Path 對象的 WMI 路徑。 Scope 此對象在其中駐留的范圍。
表03:ManagementObject類常用屬性及其說明
方法 說明 Clone 創建對象的一個副本。 CopyTo 將對象復制到另一個位置。 Delete 刪除對象。 Get 綁定到管理對象。 GetRelated 獲取與該對象(聯系對象)相關的對象的集合。 GetRelationships 獲取該對象的關聯的集合。 InvokeMethod 調用對應的對象方法。 Put 提交對對象所做的更改。
表04:ManagementObject類常用方法及其說明
下面就結合二個具體的示例來介紹Visual C#中利用上述類,提供WMI掌握如何 利用WMI編寫網絡應用程序,所使用的類庫主要是使用了上面接收的這六個類。