譯者按]本人今日著迷于腳本,成天呆在Microsoft的網(wǎng)站上。遂決定將部分
文件翻譯過(guò)來(lái),以茲共享。也希望大家能加入這個(gè)行列。另外,在翻譯的過(guò)程中,只會(huì)注重重要的部分,某些無(wú)所謂的或者客套的東西就不花時(shí)間了,請(qǐng)?jiān)彙_€有,翻譯水平和技術(shù)水平有限,不要見(jiàn)笑。
WMI腳本初級(jí)讀本:第一部分
Greg Stemp, Dean Tsaltas, and Bob Wells
Microsoft Corporation
Ethan Wilansky
Network Design Group
June 13, 2002
摘要:Scripting Guys的第一個(gè)Scripting Clinic專欄。本文介紹了如何使用WMI腳本庫(kù)創(chuàng)建有用的Windows
系統(tǒng)管理腳本
WMI(Windows® Management Instrumentation)是Microsoft保持得最好的秘密,或者曾經(jīng)被這樣告知過(guò)。就是這樣,沒(méi)錯(cuò)的。WMI是Windows的主要管理允許技術(shù)。這對(duì)你意味著什么?好,如果你管理者Windows
服務(wù)器和工作站,或者你創(chuàng)建Windows管理
程序,你需要知道WMI.本文是教授WMI系列的第一部分,說(shuō)準(zhǔn)確點(diǎn),是怎樣使用WMI腳本庫(kù)賴創(chuàng)建Windows大量的
系統(tǒng)管理腳本。
(以下省略。主要是一些客套,感謝Andrew Clinick,不知是什么人。然后是介紹作者自己, Scripting Guys以及他們的業(yè)務(wù))
What Is WMI?
WMI最初是作為Windows NT4.0 SP4的附加組件發(fā)布的,現(xiàn)在已成為Windows 2000,Windows XP,Windows.NET操作
系統(tǒng)服務(wù)器家族的核心管理允許(management-enabling)技術(shù)?;诋a(chǎn)業(yè)標(biāo)準(zhǔn)(由分布式管理任務(wù)組DMTF(Distributed Management Task Force )監(jiān)督),WMI可以訪問(wèn),配置,管理和檢測(cè)所有-好,幾乎所有-的Windows資源。
為掌握WMI的強(qiáng)大功能,想想你在去年甚至是今天是如何管理和檢測(cè)Windows工作站和
服務(wù)器的。可能你曾經(jīng)用過(guò)或正在使用大量的圖形界面的管理工具管理Windows資源,例如磁盤,事件日志,
文件,
文件夾,
文件系統(tǒng),
網(wǎng)絡(luò)組件,操作
系統(tǒng)設(shè)置,性能數(shù)據(jù),打印機(jī),等等
盡管圖形化工具提供了功能管理解決方案,但他們的共同點(diǎn)就是依賴Win32應(yīng)用
程序可編程接口(API)來(lái)訪問(wèn)和管理Windows資源。為什么?因?yàn)榫幊淘L問(wèn)Windows資源的唯一方法就是通過(guò)Win32 API.這樣Windows
系統(tǒng)管理員沒(méi)有簡(jiǎn)易的方法通過(guò)腳本語(yǔ)言來(lái)實(shí)現(xiàn)自動(dòng)化的通用管理任務(wù),因?yàn)榇蠖鄶?shù)的腳本語(yǔ)言不能直接調(diào)用Win32 API.WMI改變了這一點(diǎn),它提供了一個(gè)統(tǒng)一的模型和框架,通過(guò)這所有的Windows資源被暴露和描述。最好的事,
系統(tǒng)管理員可以使用WMI腳本庫(kù)來(lái)創(chuàng)建
系統(tǒng)管理腳本,從而管理任何Windows資源。
使用Windows Script Host 和Microsoft Visual Basic® Scripting Edition (
VBScript),或者任何支持COM自動(dòng)化的腳本語(yǔ)言(例如,ActiveState Corporation‘s ActivePerl),可以為管理和自動(dòng)化你的企業(yè)
系統(tǒng),應(yīng)用
程序和
網(wǎng)絡(luò)書寫下列所述的腳本:
· Windows .NET Server, Windows XP Professional, and Windows 2000
系統(tǒng)管理. 可以書寫腳本來(lái)獲取性能數(shù)據(jù),管理事件日志,
文件系統(tǒng),打印機(jī),矗立起,注冊(cè)表,等等(下面的自己翻譯吧 scheduler, security, services, shares, and numerous other operating system components and configuration settings.)
·
網(wǎng)絡(luò)管理. 可以書寫腳本來(lái)管理
網(wǎng)絡(luò)服務(wù),例如DNS, DHCP, and SNMP-enabled devices.
· 實(shí)時(shí)監(jiān)控. 通過(guò)使用事件訂閱(event subscriptions),可以書寫腳本來(lái)對(duì)以下資源監(jiān)控并做出回應(yīng),如事件日志,
文件系統(tǒng)和注冊(cè)表更改,以及其他實(shí)時(shí)的操作
系統(tǒng)更改。從概念上講,WMI事件訂閱和通告之于WMI與SNMP中段之于SNMP相同。
· Windows .NET Enterprise Server 管理. 可以書寫腳本來(lái)管理Microsoft® Application Center, Operations Manager, Systems Management Server, Internet Information Server, Exchange Server, and SQL Server.
Quick Start to WMI Scripting
為對(duì)WMI腳本有初步了解,首先舉個(gè)例子,獲取遠(yuǎn)程基于Windows平臺(tái)的電腦上安裝的物理內(nèi)存。在WMI之前,這個(gè)任務(wù)是不可能通過(guò)腳本簡(jiǎn)單地完成的,除非借助第三方的工具。事實(shí)上,在WMI之前,為以獲取電腦安裝物理內(nèi)存的唯一方法就是通過(guò)System Properties對(duì)話框?,F(xiàn)在,假定WMI安裝在目標(biāo)電腦并且你有權(quán)限操作目標(biāo)電腦,就可以利用Listing 1那樣簡(jiǎn)單的腳本完成該任務(wù)。
Listing 1. Retrieving total physical memory using WMI and
VBScript
strComputer = "atl-dc-01"
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
將上述腳本復(fù)制到文本編輯器,并且改變strComputer變量的值,然后保存以.vbs的擴(kuò)展保存
文件。按圖一所示運(yùn)行腳本
Figure 1. GetMemory.vbs output
神奇的現(xiàn)象出現(xiàn)了,你應(yīng)該看到了目標(biāo)電腦的物理內(nèi)存。
假定你想獲取遠(yuǎn)程電腦的所有服務(wù)的名字,狀態(tài)和啟動(dòng)類型。見(jiàn)Listing 2的樣例。注意Listing 2與Listing 1的步驟一致。
Listing 2. Retrieving services information using WMI and
VBScript
strComputer = "atl-dc-01"
Set wbemServices = GetObject("winmgmts:\\" & strComputer)
Set wbemObjectSet = wbemServices.InstancesOf("Win32_Service")
For Each wbemObject In wbemObjectSet
WScript.Echo "Display Name: " & wbemObject.DisplayName & vbCrLf & _
" State: " & wbemObject.State & vbCrLf & _
" Start Mode: " & wbemObject.StartMode
Next
運(yùn)行Listing 2的輸出參見(jiàn)Figure 2.
Figure 2. GetServices.vbs output
假設(shè)你的興趣不在于服務(wù),而在于Windows事件日志。使用Listing 1的腳本模板,Listing 3可以輕易的實(shí)現(xiàn)。必須指出的事,如果日志包含上千條記錄,可能會(huì)花費(fèi)大量的時(shí)間運(yùn)行。
Listing 3. Reading Windows event log records
strComputer = "atl-dc-01"
Set wbemServices = GetObject("winmgmts:\\" & strComputer)
Set wbemObjectSet = wbemServices.InstancesOf("Win32_NTLogEvent")
For Each wbemObject In wbemObjectSet
WScript.Echo "Log file: " & wbemObject.LogFile & vbCrLf & _
"Record Number: " & wbemObject.RecordNumber & vbCrLf & _
"Type: " & wbemObject.Type & vbCrLf & _
"Time Generated: " & wbemObject.TimeGenerated & vbCrLf & _
"Source: " & wbemObject.SourceName & vbCrLf & _
"Category: " & wbemObject.Category & vbCrLf & _
"Category String: " & wbemObject.CategoryString & vbCrLf & _
"Event: " & wbemObject.EventCode & vbCrLf & _
"User: " & wbemObject.User & vbCrLf & _
"Computer: " & wbemObject.ComputerName & vbCrLf & _
"Message: " & wbemObject.Message & vbCrLf
Next
仔細(xì)考察Listings 1, 2和3,可以得出兩個(gè)非常重要的結(jié)論。第一個(gè)結(jié)論是三個(gè)腳本執(zhí)行了相同的三個(gè)步驟:腳本連接WMI,獲取WMI管理資源,然后返回資源屬性。第二個(gè)重要的結(jié)論是唯一改變的是類名(即,Win32_LogicalMemoryConfiguration, Win32_Service和 Win32_NTLogEvent)和資源的相應(yīng)屬性。
三步驟對(duì)WMI腳本是通用的。下面仔細(xì)考察每一個(gè)步驟。
Step One: 連接WMI Service
任何腳本的第一個(gè)步驟就是與目標(biāo)電腦上的Windows管理服務(wù)建立連接。連接本地或遠(yuǎn)程電腦的WMI很簡(jiǎn)單,調(diào)用
VBScript的Getobject函數(shù),其參數(shù)為WMI腳本庫(kù)的標(biāo)記名(即"winmgmts:")和目標(biāo)電腦名
用這種方式連接WMI,會(huì)返回對(duì)SWbemServices對(duì)象的引用,在Listings 1, 2, 和 3中用變量名wbemServices引用。SWbemServices是在WMI腳本庫(kù)中定義的。WMI腳本庫(kù)提供通用功能對(duì)象集,腳本使用他們來(lái)訪問(wèn)WMI infrastructure。一旦引用了SWbemServices 對(duì)象,就可以調(diào)用SWbemServices提供的任何方法。InstancesOf就是這樣一種方法
Step Two: 獲取WMI管理資源
不可否認(rèn),第二步絕大程度上取決于要執(zhí)行的任務(wù)。在獲取有關(guān)WMI管理資源的信息時(shí),第二步很簡(jiǎn)單,調(diào)用SWbemServices對(duì)象的InstancesOf方法。如同名字暗示的那樣,InstancesOf 返回所有的由資源類名標(biāo)識(shí)的管理資源。InstancesOf按SWbemObjectSet集合的方式返回請(qǐng)求的資源。再Listing 1,2和3中,使用變量名wbemObjectSet來(lái)引用。SWbemObjectSet是WMI腳本庫(kù)定義的另外一個(gè)腳本對(duì)象
Step Three: 顯示W(wǎng)MI管理資源的屬性
最后一步是列舉SWbemObjectSet 集合的內(nèi)容。SWbemObjectSet 內(nèi)的每一項(xiàng)是一個(gè) SWbemObject (WMI腳本庫(kù)的對(duì)象),他表示請(qǐng)求資源的單個(gè)實(shí)例。可以使用SWbemObject 來(lái)訪問(wèn)管理資源類定義中定義的方法和屬性。
但如果獲取WMI信息的腳本步驟是相同的,Win32_LogicalMemoryConfiguration, Win32_Service, 和 Win32_NTLogEvent的類是什么呢?更進(jìn)一步,他們來(lái)自哪里,還有其他什么類,怎樣使用他們呢?問(wèn)題的答案在與下述的WMI體系的組件。