WMI出現(xiàn)至今已經(jīng)二十多年了,但很多人對它并不熟悉。知道它很好很強(qiáng)大,但不知道它從哪里來,怎么工作,使用范圍是什么?現(xiàn)在我跟大家說說我的理解。。。
WMI有一組API。我們不管使用VBScript、PowerShell腳本還是利用C#的來訪問WMI的類庫,都是因?yàn)閃MI向外暴露的一組API。這些API是在系統(tǒng)安裝WMI模塊的時候安裝的,通過他們我們能夠能拿到我們想要的類。
WMI有一個存儲庫。盡管WMI的多數(shù)實(shí)例數(shù)據(jù)都不存儲在WMI中,但是WMI確實(shí)有一個存儲庫,用來存放提供程序提供的類信息,或者稱為類的藍(lán)圖或者Schema。
WMI有一個Service。WMI總是能夠響應(yīng)用戶的訪問,那是因?yàn)樗幸粋€一直運(yùn)行的Windows服務(wù),名字叫Winmgmt。停止這個服務(wù),所有對WMI的操作都將沒有反應(yīng)。
WMI是可擴(kuò)展的。人人都知道WMI能干很多事情,讀取本機(jī)硬盤信息、讀取遠(yuǎn)程計算機(jī)的用戶信息、讀取域用戶信息等等。基本上,你能想到的獲取或者更改資源的操作,它都能干??芍^吃得少,干得多。它為什么這么能干呢?這基于WMI的可擴(kuò)展性。WMI對資源的操作,不是它自己實(shí)現(xiàn)了什么方法,而完全取決于向它注冊的提供程序。
WMI是管理員日常必備的強(qiáng)大工具之一,是腳本伴侶。當(dāng)然也可以把一個大型系統(tǒng)建立在WMI以及WMI的提供程序之上。以下給兩個使用WMI的例子:
strComputer = "."
Set wbemServices = Getobject("winmgmts:\\" strComputer)
Set wbemObjectSet = wbemServices.InstancesOf("Win32_LogicalMemoryConfiguration")
For Each wbemObject In wbemObjectSet
WScript.Echo "Total Physical Memory (kb): " wbemObject.TotalPhysicalMemory
Next