WMI的一個小工具,提供給愛好WMI的朋友,瀏覽WMI最易用的工具是CIM Studio,CIM Studio是一個WMI工具!這是一個更高級的工具,用于查看和編輯CIM存儲庫中類的屬性和方法.
此外,它允許修改,創建和刪除類以及它們的實例.這可以通過使用瀏覽器界面手工完成,或通過使用MOF(被管對象格式)完成.CIM Studio中可用的一個向導把現存的類或實例輸出到MOF文件中.另一個向導則把MOF文件輸入到CIM存儲庫中.
使用步驟:
1、單擊頁面上部的電腦圖標,會顯示一個對話框,單擊“Connect”按鈕,如圖1所示;
圖1
2、任何時候出現如圖2所示的登陸對話框,單擊OK按鈕即可;
圖2
3、選擇合適的命令空間(這里選擇常用的root\cimv2),然后單擊OK按鈕,如圖3所示;
圖3
4、直接雙擊右側類名,或者單擊上部的望遠鏡按鈕,在彈出的查找對話窗中輸入你要查找的完整類名或者類名的一部分,單擊Go按鈕查找;并在查找結果中選擇你要查看的類名,單擊OK按鈕,如圖4所示;
圖4
5、單擊右上部倒數第4個實例按鈕,即可得到本機所有安裝的軟件列表,如圖5所示;
圖5
任何WMI類以及實例的查看均可參考以上步驟。
WMI CIM Studio實例:
WMI CIM Studio在開始菜單里單擊它,你會發現它是以網頁形式在IE瀏覽器中打開的。
WMI Object Browser主要處理類的實例.WMI CIM Studio可以訪問類以及它們的實例.
當啟動應用程序時,在所連接的名字空間中默認顯示類的層次結構(圖3-12)
圖3-12 WMI CIM Studio的默認初始視圖顯示了root\CIMV2名字空間的類層次結構
(1)處理類
接口包括類導航器(左幀)和類瀏覽器(右幀).在類導航器中選擇的類的詳細信息出現在類瀏覽器中.
左幀中類的圖標:
與它們有關聯的常規(一個立方體)或聯合(帶有雙箭頭的正方形),具體(灰色背景)或抽象(白色背景),
或它們是否為帶有具體子類的抽象子類([淺]灰色背景?).
類的列表是按字母順序進行排序的,因此它從系統類(帶有前導的雙下劃線)開始.
可能通過WMI CIM Studio查找,修改或刪除現在的類,以及創建新的類(然而這沒有應用到系統類).
當在類導航器中選擇一個類時,它的屬性,方法和聯合的列表出現在類瀏覽器中.
可以點擊工具欄最右邊的問號圖標,找出有關它們的更多信息.
(2)處理實例
WMI CIM Studio也允許在實例上執行各種操作.
可以通過點擊導航器幀中的搜索(?雙箭頭?)圖標并輸入類名進行查找.
圖3-13 使用WMI CIM Studio列出root\CIMV2名字空間中_Win32Provider系統類的所實例.
圖3-14 使用WMI CIM Studio列出Win32_OperstingSystem類的屬性
可以通過點擊類瀏覽器幀中右邊第4個圖標(Instances)來列出它的所有實例.
將列出前面在WMI對象瀏覽中看到的相同實例.
(3)運行WQL查詢
WMI CIM Studio中可用的一個附加特性是能夠對連接的名字空間進行WQL查詢.(點擊類瀏覽器幀中右邊第二個圖標)
(4)向導
CIM 包含下面的向導:
*提供程序代碼生成向導---生成一組由動態實例和方法提供程序開發者使用的文件.這些提供程序在CIM存儲庫外可以根據需要供給類.
*MOF生成向導---從存儲庫中輸出類定義(或它們的實例)到MOF文件中.這一般用于在計算機間移植現在的類或實例.\
輸出MOF文件后,可以使用MOF編譯器向導或mofcomp.exe工具再輸入到另一臺計算機的存儲庫中.
*MOF編譯向導---從MOF文件中輸入類定義(或它們的屬性)到存儲庫中.這牽涉到在計算機間移植現存類或實例的過程的第二部分.
它也用于檢驗MOF文件的語法或把它轉換成二進制格式.
提示: WMI SDK自定義視圖可以在CIM Studio中使用.
WMI 事件注冊工具:
WMI事件注冊工具用于創建,查看和修改事件事件相關類的實例(比如用戶,過濾器和計時器)以及在過濾器和用戶間創建綁定.
WMI事件注冊工具的接口分成兩幀.
左幀顯示了所有事件相關類,他們分組成3個獨立的樹層次結構---用戶,過濾器和定時器.
每層可以從幀的左上解的一個列表框中選擇.
右幀顯示了用戶和過濾器之間的綁定(在左窗格中選擇一個過濾器或一個用戶后).[最初不會出現綁定]
用戶是作為__EventViewerConsumer類(__EventConsumer類的子類)的實例創建的,\
過濾器是__EventFilter類的實例,計時器是__TimerInstruction類的實例.
圖3-15 WMI事件注冊顯示了一系列__EventFilter類的實例(左邊)和一系列EventViewerConsumer類的實例(右邊)
因為事件注冊工具把用戶作為EventViewerConsumer類的實例創建,因此它們是作為永久用戶實例的.這些實例是邏輯用戶.
有關它們預訂事件的通知將通過WMI事件瀏覽器應用程序來顯示.這個應用程序將用作物理用戶.
其他類型的永久用戶: SMTPEventConsumer和ActiveScriptEventConsumer.
第一個用戶允許發送基于SMTP的通知.第二個用戶可用于響應事件的腳本.
使用事件注冊工具,配置兩種類型的事件的處理:
*內部事件,通過CIM存儲庫中的變更來產生.
要監視的類型將由__EventFiltter類的一個實例指定(條件由WQL設定).過濾器會在注冊階段鏈接到邏輯消息者.
*計時器事件,在特定的時間內調用一次或重復調用(基于時間間隔).
絕對時間或間隔值是使用__TimerInstruction類的實例的屬性來設置的.
計時器的變更將通過__EventFilter類的實例來偵測(使用WQL語句設置的規則).
相應地,這個過濾器將鏈接到注冊過程的邏輯用戶.
(1)配置使用永久EventViewerConsumer注冊的內部事件
將為內部事件設置一個永久用戶.每次機服務在目標計算機上停止時,在WMI事件瀏覽器應用程序中將出現通知.
設置一個過濾對象:
需要開始創建__EventFilter類的實例和指定它的屬性.一個新的實例可以通過如下方法完成:
顯示WMI事件注冊工具左幀中的過濾器列表,然后從__EventFilter文件夾的彈出菜單中選擇新建實例選項.
Name屬性是鍵,它定義了實例,因此需要保證它是唯一的.如果沒有指定它,將自動生成.
QueryLanguage為WQL;Query屬性為WQL語句.
圖3-16 使用WMI事件注冊工具設置_EventFilter類實例的Query值.
"SELECT * FROM __InstanceModificationEvent WITHIN 5 WHERE TargetInstance ISA "Win32_Service"
AND TargetInstance.State="Stopped"
AND TargetInstance.Name="Spooler"
AND PreviousInstance.State<>TargetInstance.State"
用戶事件通知的類型與這個查詢有關.
當設置屬性時,生成了__EventFilter類的實例.(如圖3-18)
圖3-18 顯示在WMI事件注冊窗口中的_EventFilter實例
內部事件是通過CIM存儲庫的變更來反映的.CIM對象管理器可以通過監測9個系統類的新實例創建來偵測這些變更.
ISA運算符是同對象數據類型的屬性一起使用的.它表示屬性是一個對象.
在例子中,類型屬性名字是TargetInstance(_InstanceModificationEvent類的一個屬性).
ISA運算符可以確定這個屬性表示的類(包括它的任何父類).
查找TargetInstace屬性為Win32_Service類的一個對象的_InstanceModificationEvent類實例.(圖3-19)
圖3-19 使用WMI CIM Studio瀏覽_InstanceModificationEvent的TargetInstance屬性
WITHIN參數設置了時間間隔,它確定了WMI查詢變更的頻率.這影響了生成的變更發生變化后速度有多快.
注意TargetInstance屬性和它的類型(對象).這是被修改對象的一個占位符(比如終止的一個Windows服務).
當提供程序或WMI偵測到這種變化時,會創建_InstanceModificationEvent的一個實例.TargetInstance的值將被指出對象所屬的類.
所以在本例中,Name屬性為Spooler,State屬性為Stopped.
設置一個用戶對象:
在前一個步驟中創建了過濾器,確定了哪些事件通知應該發送給一個用戶.
現在創建用戶類的一個實例(邏輯用戶).通過選擇事件注冊工具左上角列表框的用戶來開始.
圖3-20 使用WMI事件注冊顯示一系列EventViewConsumer實例.
從彈出菜單中選擇的選項或點擊左邊的第二個圖標(左上角帶有一個黃色星號點正方開).
鍵入如下屬性的值:
Name:Stop_Spooler_EventConsumer
Description:Spooler Service Stopped
Severity:1
[還可以指定MachineName屬性,它是想接收通知的計算機的名字(如果與本地機器不一樣的話)]
點擊OK,以創建EventViewerConsumer類的實例.(圖3-21)
圖3-21 使用WMI事件注冊工具創建EventViewerConsumer類的一個實例
將用戶綁定到過濾器
綁定可以在相同的窗口中實施,操作方法如下:
選擇恰當的_EventFilter類實例,點擊右邊的第二個圖標,顯示檢查標記,注冊按鈕(在監視器中它以綠色出現),如圖3-22.
圖3-22使用WMI事件注冊工具,隨__EventFilter類的實例一起注冊EventViewerConsumer類的實例
現在,如果終止Spooler服務,WMI事件瀏覽器將在5秒內出現,并給出適當的通知.
通知包含時間,源計算機和創建邏輯用戶時鍵入的說明信息.如圖3-23.當每次Spooler服務狀態改變為終止時都將顯示此消息.
圖3-23 WMI事件瀏覽器顯示了Spooler服務終止的通知
(2)配置使用永久EventViewerConsumer注冊的計時器事件
前面的事件作為響應一個系統事件出現.如果想在特定的日期和時間或以規則的時間間隔下生成通知,可以使用計時器事件.
下面的步驟可用于創建帶有WMI事件注冊工具的計時事件通知:
設置一個計時對象:
__EventTimer類的兩個子類可以從WMI事件注冊實用程序中取得:
*__AbsoluteTimerInstruction---在特定的日期和時間生成一個事件.
*__IntervalTimerInstruction---在特定的時間間隔生成一個事件(以毫秒表示).
在兩種情形下,一開始就需要選擇WMI事件注冊實用程序左上角的列表框的計時器.
然后可以通過使用彈出菜單或點擊左邊的第二個圖標,創建每個計時器的實例.
當創建__AbsoluteTimerInstruction的一個實例時,需要提供如下的參數:
*TimerID---標識這個實例的一個字串,當設置過濾器時使用.它應該設為一個唯一值.
*SkipIfPassed---如果設為真值,在用戶不可用的前提下生成一個事件.\
在默認條件下,它設為假值,這意味著事件通知進行排除,當它變為可用時發送給一個用戶.
*EventDateTime---生成事件時進行計時(只發生一次)
圖3-24 使用WMI事件注冊工具創建__AbsoluteTimerInstruction類的實例
當創建__IntervalTimerInstruction的一個實例時,唯一不同的是IntervalBetweenEvents參數,這個參數的值是以毫秒表示的.
圖3-25 使用WMI事件注冊工具創建__IntervalTimerInstruction類的實例
設置一個過濾對象:
設置一個過濾對象需要確定感興趣的__TimerEvent類型(使用上面賦予的TimeId).這將采用WQL查詢形式:
SELECT * FROM __TimerEvent WHERE TimerID = "AbsoluteTimer Example"
對于間隔計時器,這個WQL語句(圖3-26)略有不同,只是因為TimerID值不同.
圖3-26 WQL查詢語句使用__EventFilter類的這個實例來確定用戶將收到的計時事件
設置一個用戶對象:
設置一個用戶對象的步驟與前面使用的創建內部用戶事件的步驟相同.
顯而易見,它們名稱和說明應該是不同的,且應該清楚地解釋用戶的目的.
severity級別為1.如圖3-27
也可以把遠程計算機指定為事件的接收者.
此時,請檢查用于設置WMI對象的賬戶在遠程計算機上是否有恰當的權限.而且還要保證兩臺計算機上的時鐘同步.
圖3-27 使用WMI事件注冊工具創建EventViewerConsumer類的實例
將用戶綁定到過濾器:
當把用戶綁定到過濾器時,在左窗體幀選擇恰當的用戶,和在右幀中設置的過濾器,然后點擊右邊的第二個圖標(注冊按鈕).
完成后,在指定的時間,通知將在WMI事件瀏覽器窗口中顯示(如圖3-29).
圖3-29 WMI事件瀏覽器顯示了有磁AbsoluteTimer事件的通知
上面的是一次通知.如果想讓這個通知以有規律的間隔重復.使用__IntervalTimerInstruction的實例進行替代,\
設置一個過濾器以監控所有帶有恰當TimerID的__TimerEvents,最后使用邏輯用戶注冊過濾器.