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