學習筆記-WMI瞭解

WMI就是Windows Management Instrumentation(Windows管理規範)。它是Windows中的一個核心管理技術。是Microsoft基於Web的企業管理(WBEM)和 Desktop Management Task Force(DMTF)工業標準的實現。就是一種基於標準的系統管理的開發接口,這組接口用來控制管理計算機。它提供了一種簡單的方法來管理和控制系統資源。

WMI 爲訪問大量的 Windows 管理數據和方法的提供了一個統一的機制。WMI通過腳本、C++程序接口、.NET類(系統管理)和命令行工具(WMIC)提供了對這個信息的訪問。WMI的功能還包括事件、遠程、查詢、查看、計劃和實施用戶擴展及更多內容。

管理員可使用 WMIC 的命令行管理能力。

腳本程序員可使用 WMI 腳本來自動進行任務管理。

通過編寫一個 WMI 支持程序,系統開發人員可使用 WMI 發佈他們的檢測工具。

通過編寫一個 WMI 支持程序,應用程序開發人員可使用WMI發佈他們的應用程序管理檢測工具。

使用豐富的查詢和事件特性,管理應用程序(如監視器)的開發人員可使用WMI訪問Windows工具。

WMI是什麼

WMI是Windows 2K/XP管理系統的核心;對於其他的Win32操作系統,WMI是一個有用的插件。WMI以CIMOM爲基礎,CIMOM即公共信息模型對象管理器 (Common Information Model Object Manager),是一個描述操作系統構成單元的對象數據庫,爲MMC和腳本程序提供了一個訪問操作系統構成單元的公共接口。有了WMI,工具軟件和腳本程序訪問操作系統的不同部分時不需要使用不同的API;相反,操作系統的不同部分都可以插入WMI,如圖一所示(該圖來自MSDN),工具軟件和WMI可以方便地讀寫WMI。

Windows 2K/XP和Windows 98都支持WMI;如果爲NT 4.0和Windows 95加上了Service Pack 4或更高版本,NT 4.0和Win95也支持WMI。因此,用WMI進行遠程管理時,並非一定要用Windows 2K/XP(當然,如果WMI腳本在一臺沒有性能監視器的Win9x機器上運行,就不能在遠程Win9x系統上查詢Windows 2K/XP的性能監視器。

  如前所述,WMI允許通過一個公共的接口訪問多種操作系統構成單元,因此不必分別對待各種底層接口或所謂的“提供者”。利用WMI可以高效地管理遠程和本地的計算機;與此相對,並非所有的Windows 2K/XP命令行工具都支持遠程運行。

  WMI是WBEM模型的一種實現。WBEM即Web-Based Enterprise Management,或基於Web的企業管理,WBEM由DMTF(Distributed Management Task Force,分佈式管理任務組)在許多廠商的幫助下創立,包括Compaq、Sun、Microsoft等。WBEM的目標是,爲管理企業環境開發一個標準的接口集。WBEM模型最關鍵的部分是它的數據模型(或描述和定義對象的方式)、編碼規範(Encoding Specification),以及在客戶端和服務器端之間傳輸數據的模式。

  WBEM的數據模型是CIM(Common Information Model,公共信息模型)。CIM是一個用來命名計算機的物理和邏輯單元的標準的命名系統(或稱爲命名模式),例如硬盤的邏輯分區、正在運行的應用的一個實例,或者一條電纜。

  CIM是一個面向對象的模型,使用一組面向對象的術語進行描述。CIM包含類(Class),類是被管理單元的模板。類的實例稱爲對象 (Object),對象代表着底層系統的一個具體單元。名稱空間(Namespace)是一個類的集合,每個名稱空間面向一個特定的管理領域。類包含屬性 (Property)和方法(Method)。

  CIM分三層。第一層是核心模型(Core Model),這一層包含的類定義對於所有管理領域來說都是共同的。第二層是公共模型(Common Model),這一層包含的類定義對於特定的管理領域來說是公共的,但與具體的操作系統和系統設計無關。第三層是擴展模型(Extension model),這一層包含的類定義與特定的操作系統或技術有關。

  WMI是Microsoft擴展CIM 2.0得到的面向Win32系統的擴展模型。引用WMI類和屬性的形式是“擴展前綴_類名稱.屬性名稱”,例如 Win32_ComputerSystem.Name,其中Win32是CIM模式cimv2名稱空間內WMI擴展類的前綴,ComputerSystem是類,Name是屬性。

  編寫WMI腳本的很大一部分工作涉及到讀取和設置屬性值。當前,WMI提供的方法還很有限,但隨着時間的推移,相信WMI和CIM提供的方法都會越來越豐富。

--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

在.NET下使用WMI功能需要用到

System.Management和System.Management.Instrumentation命名空間。

.NET框架中與WMI規範有關的命名空間有兩個,分別是System.Management和System.Management.Instrumentation命名空間。前者用來訪問標準WMI提供程序提供的功能,獲取系統信息,或者執行提供程序的方法(比如修改系統的屬性、執行關機動作等)等;後者則是用來註冊新提供程序、創建新類和發佈實例。

System.Management命名空間中的類主要有:
ManagementClass——管理類
        ManagementClass的構造函數輸入參數爲WMI類名稱,標識管理對象(相當於COM中的IWbemServices ),例如:


diskman = new ManagementClass("Win32_LogicalDisk");        diskman代表Win32平臺下的整個邏輯磁盤的管理對象。

ManagementObjectCollection——管理對象的集合。(相當於COM中的枚舉器IEnumWbemClassObject)

ManagementObject——爲具體的數據管理對象,(相當於COM中的IWbemClassObject)。
        對於上面的例子而言,可以對應邏輯磁盤的C分區管理對象。看下面的代碼:


ManagementObjectCollection disks = diskman.GetInstances();
foreach (ManagementObject disk in disks)
...{
        Console.WriteLine("Disk = {0}" , disk["Name"].ToString());
        Console.WriteLine("Disk = {0}" , disk["FileSystem"].ToString());
         Console.WriteLine("Disk = {0}" , disk["Size"].ToString());
}        disks爲邏輯磁盤分區C,D,E…的集合,對於每一個邏輯分區,由一個disk對象管理其數據,並輸出名稱,文件系統和磁盤空間大小。

ManagementQuery
        用作所有查詢類的基礎,作爲查詢的抽象基類,可以繼承以實現其方法,它被聲明爲abstract的,這意味着我們不能創建一個該類的實例,但可以用該類型的對象代表它的所有派生類對象。.NET提供了從ManagementQuery兩個派生的類: EventQuery和ObjectQuery分別用於查詢管理事件和管理對象,而我們通常使用的SelectQuery是從ObjectQuery派生而來,詳細請參見.NET Class Library Reference。

ManagementObjectSearcher
用於根據指定的查詢或枚舉檢索管理對象的集合。


SelectQuery selectQuery = new SelectQuery("win32_logicaldisk");
ManagementObjectSearcher searcher =
            new ManagementObjectSearcher(selectQuery);
foreach (ManagementObject disk in searcher.Get())
...{
          Console.WriteLine(disk.ToString());
}        以上代碼指定searcher的查詢爲selectQuery,即Win32邏輯磁盤的集合查詢,然後將這些邏輯磁盤分區輸出。也可以直接使用WQL查詢語句來實例化ManagementObjectSearcher對象:


ManagementObjectSearcher search =
       new ManagementObjectSearcher(“SELECT * FROM Win32_ LogicalDisk”);
ManagementEventWatcher
        用於預訂WMI事件通知。

 

-------------------------------------------------------------------------------------------------------------------------------------------------------- WMI代碼片段收藏: http://hi.baidu.com/ysdonet/blog/item/30e1aa09b8a619aa2eddd4c2.html
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章