摘要:隨著計算機及網絡技術的迅猛發展,實時、高效、安全地管理計算機,更好地共享資源的各種技術成為人們研究的重點。本文針對傳統C/S管理模式存在的問題,提出采用WMI技術來實現對計算機進行高效管理的方法,并給出獲取遠程計算機信息和遠程控制計算機的具體實現。
關鍵詞:WMI;C/S;遠程控制;WMI腳本;VB.NET
中圖分類號:TP391 文獻標識碼:A 文章編號:1009-3044(2008)11-20370-02
1 引言
隨著計算機技術和網絡技術的飛速發展,計算機應用已經廣泛普及到各行各業,為了更好地共享使用設備,對計算機管理也提出了越來越高的要求。傳統的管理方法是采取嚴格的C/S模式,客戶機必須運行特定的終端程序,時刻監聽服務器,才能保證客戶機實時響應。如果客戶機因為某種原因退出終端程序,那么服務器就無法管理該客戶機。因此,傳統管理計算機的方法不僅增加了客戶端的系統開銷,而且對各種故障難以檢測,其管理效率很難得到較大改善。本文首先介紹一種高效管理計算機的技術—WMI(Windows Management Instrumentation)—Windows管理規范,然后提出一種基于WMI技術對計算機進行高效管理的方法,給出獲取遠程計算機信息和遠程控制計算機的WMI技術實現,結合應用實例說明這種方法的有效性。
2 WMI技術概述
WMI是Microsoft基于Web的企業管理(WBEM)的實現,同時也是一種基于標準的系統管理接口。
WMI技術是微軟提供的Windows下的系統管理工具,通過該工具可以在本地管理客戶端系統中幾乎一切的信息,很多專業的網絡管理工具都是基于WMI開發的。WMI是一種輕松獲取系統信息的強大工具,信息源可能是一個硬件、操作系統或軟件應用程序,數據源提供的信息稱為規范。
WMI作為Windows 2000操作系統的一部分提供了可伸縮的,可擴展的管理架構.公共信息模型(CIM)是由分布式管理任務標準協會(DMTF)設計的一種可擴展的、面向對象的架構,用于管理系統、網絡、應用程序、數據庫和設備。Windows管理規范也稱作CIM for Windows,提供了統一的訪問管理信息的方式。利用WMI,可以監視、跟蹤和控制有關軟件應用程序、硬件組件和網絡的系統事件,將來自不同來源的數據用通用、標準且邏輯上有組織的方式映像出去,以便在管理數據之間建立相互關系和關聯,而不必考慮這些數據的類型、內容或來源。
使用WMI可以獲得統一的編程API,遠程管理,可發現和導航,過濾查詢,強大的事件發布和訂閱等功能。它由管理架構、WMI提供者、WMI使用者、CIM(Common Information Model, 公共信息模型)儲存庫和CIMOM (Common Information Model object manager, 公共信息模型對象管理器)五部分組成。在現代計算機管理中,系統管理員更為關注的是監視應用程序的運行狀況、檢測瓶頸或故障、管理和配置應用程序、查詢應用程序數據、執行無縫的本地或遠程管理等操作,并能在最短時間,最有效率的處理或規避上述問題。而WMI(Windows Management Instrumentation),即:視窗管理規范技術提供了一個統一的、基于標準的、可擴展的面向對象接口,除此之外,WMI還 提供了與系統管理信息和基礎 WMI API 交互的標準方法,這些標準都是本例中基于WMI的計算機管理技術平臺實現的基礎。
3 基于WMI的計算機管理技術的實現
筆者在研究與開發學校機房管理系統的過程中,充分利用了WMI技術在計算機管理方面的強大功能,采用WEB形式對機房和實驗室設備進行綜合管理。本文給出了基于結合WMI和WEB服務技術來獲取遠程計算機信息、遠程控制計算機及具體的實現方法,其它的管理功能如監視應用程序的運行狀況、管理和配置應用程序等,均可采用類似的方法實現。
3.1 使用WMI獲取遠程計算機信息
現在的計算機以及網絡組成十分復雜,例如系統硬件方面就有主板、硬盤、網卡等;軟件方面有
操作系統、系統中安裝的軟件、正在運行的進程等;網絡方面有域、工作組等等,對這些信息的收集和數據的處理是現代計算機管理中非常重要的任務。WMI的功能十分強大,可以管理windows的方方面面,從常見的文件操作到硬件管理,都可以通過WMI來實現。以下介紹筆者使用WMI和.NET框架一起來獲取遠程計算機軟硬件的實現方法。
首先需要引入System.Management命名空間。在.NET中,使用System.Management命名空間,通過對class的操作,可以查詢系統軟硬件的信息。此命名空間是.NET 框架中的 WMI 命名空間,它提供的類對象為訪問各種管理對象提供了面向對象的編程接口,并包括下列支持 WMI 操作的第一級類對象:
(1)ManagementObject 或 ManagementClass:分別為單個管理對象或類;
(2)ManagementEventWatcher:用于預訂來自 WMI 的事件通知;
(3)ManagementQuery:用作所有查詢類的基礎;
(4)ManagementObjectSearcher:用于根據指定的查詢或枚舉檢索 ManagementObject 或 ManagementClass 對象的集合。
System.Management 類的使用編碼范例對.NET 框架環境很適合,并且 WMI 在任何適當的時候均使用標準基框架。應用程序和服務可以通過使用從 ManagementObjectSearcher 和 ManagementQuery 派生的類,查詢其感興趣的管理信息(例如在磁盤上還剩多少可用空間、當前 CPU 利用率是多少、某一應用程序正連接到哪一數據庫等等);或者它們可以通過使用 ManagementEventWatcher 類來預訂各種管理事件。
筆者在學習了上述相關理論知識后,了解在.NET中如何與WMI進行通訊以便達到獲取信息的目的,并著手編寫了一些利用System.Management下面的類來獲取系統相關信息的代碼,在此做一些簡單介紹。
獲取硬件信息(以下是一段獲取主板的序列號以及制造商的代碼):
Dim searcher As New ManagementObjectSearcher(\"SELECT * FROM Win32_BaseBoard\")
Dim share As ManagementObject
For Each share In searcher.Get()
Debug.WriteLine(\"主板制造商:\" share(\"Manufacturer\"))
Debug.WriteLine(\"型號:\" share(\"Product\"))
Debug.WriteLine(\"序列號:\" share(\"SerialNumber\"))
Next share
此段代碼同樣采用WQL語句實現。同理,還可獲取網卡硬件地址、硬盤ID和CPU系列號等信息,在此就不一一列舉。
獲取軟件信息(以下是一段列出所有系統當前共享目錄的代碼):
Imports System.Management
Dim searcher As New ManagementObjectSearcher(\"SELECT * FROM Win32_share\")
Dim share As ManagementObject
For Each share In searcher.Get()
MessageBox.Show(share.GetText(TextFormat.Mof))
Next share
上述代碼采用WQL(WMI Query Language)語句,也就是標準SQL的一個子集加上了WMI的擴展,進行SQL操作,代碼簡單,通俗易懂。由于WQL是個只讀的查詢語言,只能查詢響應的數據,不能用UPDATE,INSERT等更新操作,并且采用了一種MOF(Meta Object Facility),托管對象格式的顯示。
3.2 使用WMI遠程控制計算機
WMI 提供了大量的規范以便為許多高端應用程序(例如,Microsoft Exchange、Microsoft SQL Server 和 Microsoft Internet 信息服務 (IIS))實現幾乎任何管理任務。管理員可以執行下列任務:
(1)監視應用程序的運行狀況;(2)檢測瓶頸或故障;(3)管理和配置應用程序;(4)查詢應用程序數據(使用對象關系的遍歷和查詢);(5)執行無縫的本地或遠程管理操作。
一般而言,對計算機的控制主要包括:重新啟動計算機、關閉計算機、注銷當前用戶、啟動或終止某個進程(某項服務)。
使用WMI實現遠程控制的最簡單方法是編制WMI腳本程序,然后在命令行中運行該腳本,其命令格式為:Cscript.exe 腳本文件名,Cscript.exe是執行腳本的宿主程序,當運行該程序時,它自動執行作為輸入參數的腳本文件。
筆者通過編寫WMI腳本程序來實現計算機遠程控制的過程中發現編寫WMI腳本的很大一部分工作涉及到讀取和設置屬性值,WMI腳本的語法比較簡單,編制起來較容易。腳本程序在任何一個具有WSH(Windows Script Host)環境的系統中都可以運行,由于它不依賴于特定的開發工具和運行環境,因此具有良好的可移植性。只要在腳本中指定了要控制的遠程計算機名,且該計算機是可訪問的同時擁有遠程系統的管理員權限,則在任何時候都可以對它進行遠程控制。相對于傳統的C/S控制模式,這種方法顯得相當簡單和可靠。
對比傳統的C/S控制模式,我們需要能更高效地管理計算機,因此筆者又嘗試在軟件中實現遠程控制功能,發現同樣通過簡單的代碼既可實現,以下介紹筆者在.NET環境下遠程控制計算機的實現方法。
以遠程關閉計算機為例(VB.NET編寫的核心代碼):
Dim scope As ManagementScope = New ManagementScope(“\\\\”+RemoteHostName + “\\Root\\CIMV2”, options) //以給定的管理員帳號連接給定計算機名或者IP地址的計算機
Try
scope.Connect() //連接遠程計算機
Dim oq As System.Management.ObjectQuery
oq = New System.Management.ObjectQuery(\"Select * From Win32_OperatingSystem\")
//調用遠程計算機進行WMI操作
Dim gwo As ManagementObjectSearcher
gwo = New ManagementObjectSearcher(scope, oq)
//從已經完成遠程連接的計算機中,得到WMI操作集合
Dim pwo As ManagementObjectCollection
pwo = gwo.Get()//存放得到WMI操作
Dim mo As ManagementObject//定義WMI操作對象
For Each mo In pwo
Dim ss() As String = {\" \"}
mo.InvokeMethod(\"Shutdown\", ss)
Next//調用WMI控制,實現關閉遠程計算機
Console.WriteLine(\"指定的設備已經被關閉!\")
Catch ex As Exception
Console.WriteLine(ex.Message)
Console.WriteLine(\"不能與指定設備建立連接,設備已經關閉或者出現網絡故障!\")
End Try
當觸發某個事件,執行上述代碼后,就實現了關閉遠程計算機的功能,不需要管理員一一去關閉每臺遠程計算機。這種方法同樣不需要在被控制的計算機上運行任何終端程序,只要該計算機是可訪問且擁有該計算機的管理員權限,即可被遠程控制。根據此例中的程序稍做修改就可得到遠程重啟計算機等其他一系列控制程序來進行遠程控制。
4 結束語
與傳統C/S模式相比,使用WMI 來進行計算機管理將會帶來更可靠的計算環境和更高的系統可靠性,提高了管理的效率,從而節省了系統的開銷。WMI技術的應用把計算機管理推向了一個新的境界,在當今高度信息化的時代,只有充分利用計算機和網絡的先進技術,才能使計算機的管理日趨實時高效。
參考文獻:
[1] 張茜,張銀福. 基于Web服務器的設備管理技術研究與實現[J] 計算機工程與應用,2003,24:169-171.
[2] 姜邊.一種基于.NET元數據的對象持久化框架[J] 計算機應用,2005,4:833-836.
[3] 彭錦,稱德人.B/S結構的ebXML注冊中心的實現[J] 計算機應用,2005,1:236-237.
[4] MARCIN POLICHT等. WMI技術指南[M] 北京:機械工業出版社,2002.
[5] DAVID CHAPPELL. .NET大局觀[M] 電子工業出版社, 2006.
[6] BILL EVJEN,BILLY HOLLIS. VB.NET高級編程(第3版)[M] 清華大學出版社, 2005.