WMI是Windows 2000/XP管理系統(tǒng)的核心;對(duì)于其它的Win32操作系統(tǒng),WMI是一個(gè)有用的插件。WMI以CIMOM為基礎(chǔ),CIMOM即公共信息模型對(duì)象管理器 (Common Information Model Object Manager),是一個(gè)描述操作系統(tǒng)構(gòu)成單元的對(duì)象數(shù)據(jù)庫(kù),為MMC和腳本程序提供了一個(gè)訪(fǎng)問(wèn)操作系統(tǒng)構(gòu)成單元的公共接口。Windows 管理規(guī)范 (WMI) 是可伸縮的系統(tǒng)管理結(jié)構(gòu),它采用一個(gè)統(tǒng)一的、基于標(biāo)準(zhǔn)的、可擴(kuò)展的面向?qū)ο蠼涌?。我在剛開(kāi)始理解WMI的時(shí)候,總以為WMI是“Windows管理接口(Interface)”。
下面我們就詳細(xì)來(lái)了解如何利用WMI實(shí)現(xiàn)補(bǔ)丁的檢測(cè)過(guò)程。圖1是整個(gè)檢測(cè)過(guò)程的流程圖。
圖1.利用WMI實(shí)現(xiàn)補(bǔ)丁檢測(cè)之流程圖
第一步,設(shè)置需要檢測(cè)的補(bǔ)丁號(hào)。我們知道,微軟的每個(gè)補(bǔ)丁都會(huì)有一個(gè)標(biāo)準(zhǔn)的編號(hào)(如KB828741),對(duì)于最新的補(bǔ)丁,我們可以從微軟的網(wǎng)站上獲得。然后,將希望用戶(hù)安裝的補(bǔ)丁號(hào)放到一個(gè)數(shù)組里。根據(jù)不同Windows操作系統(tǒng)我們需要設(shè)置不同檢測(cè)補(bǔ)丁號(hào)。基于當(dāng)前Windows系統(tǒng)使用情況,我只對(duì)Windows 2000/2003/XP進(jìn)行檢測(cè)。
圖1.利用WMI實(shí)現(xiàn)補(bǔ)丁檢測(cè)之流程圖
第一步,設(shè)置需要檢測(cè)的補(bǔ)丁號(hào)。我們知道,微軟的每個(gè)補(bǔ)丁都會(huì)有一個(gè)標(biāo)準(zhǔn)的編號(hào)(如KB828741),對(duì)于最新的補(bǔ)丁,我們可以從微軟的網(wǎng)站上獲得。然后,將希望用戶(hù)安裝的補(bǔ)丁號(hào)放到一個(gè)數(shù)組里。根據(jù)不同Windows操作系統(tǒng)我們需要設(shè)置不同檢測(cè)補(bǔ)丁號(hào)?;诋?dāng)前Windows系統(tǒng)使用情況,我只對(duì)Windows 2000/2003/XP進(jìn)行檢測(cè)。
‘ 對(duì)于windows 2000
arrFixed_WIN2K=Array("KB840315","KB870669","KB828741","KB835732",
"KB840987","KB841356","KB885835","KB885836",
"KB842526","KB841872","KB841873","KB889293")
'對(duì)windows 2003系統(tǒng)
arrFixed_WIN2K3=Array("KB834707","KB840374","KB867801","KB833987",
"KB873376","KB885835","KB885836")
'對(duì)于windows xp SP1
arrFixed_XP1=Array("KB840987","KB833987","KB839645","KB840315","KB841873","
KB873376","KB841356","KB889293","KB885835","KB885836")
'對(duì)于windows xp SP2
arrFixed_XP2=Array("KB834707","KB885835","KB885836")
第二步,創(chuàng)建WMI對(duì)象,并和目標(biāo)主機(jī)建立連接。
Dim objWMIService // WMI對(duì)象
Dim strComputer = “.” // 地址為當(dāng)前主機(jī)
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\" strComputer "\root\cimv2")
首先,定義兩個(gè)變量objWMIService和strComputer,第一個(gè)為我們要?jiǎng)?chuàng)建的服務(wù)定位對(duì)象,第二個(gè)為目標(biāo)主機(jī)IP地址(如果為當(dāng)前主機(jī)者為“.”)。第三句創(chuàng)建一個(gè)連接到目標(biāo)主機(jī)的服務(wù)對(duì)象,定義名字空間參數(shù)為“root\cimv2”。在這個(gè)名字空間里有我們接下來(lái)要用的系統(tǒng)信息。
Socket:詳細(xì)代碼請(qǐng)看光盤(pán)附送的Check_patch.txt,更改文件擴(kuò)展名txt為VBS,在Windows下可雙擊運(yùn)行,如果當(dāng)前系統(tǒng)檢測(cè)出未打補(bǔ)丁,則出現(xiàn)提示窗口,否則無(wú)。
第三步,讀取當(dāng)前用戶(hù)操作系統(tǒng)信息,及其安裝補(bǔ)丁的情況。在名字空間“root/cimv2”下,實(shí)例“Win32_OperatingSystem”為我們提供了詳細(xì)的當(dāng)前操作系統(tǒng)信息。我們采用Wql(sql for WMI)來(lái)讀取該實(shí)例,熟悉SQL語(yǔ)法的朋友一看就知道是在做什么了。
' 先判斷主機(jī)系統(tǒng)信息:OS,SP補(bǔ)丁版本情況
' 獲取系統(tǒng)信息
Dim objOSInfo // 獲取操作系統(tǒng)信息
Dim intOSver,intOStype,intCurrentSP // 當(dāng)前系統(tǒng)版本,類(lèi)型,Service Pack號(hào)
Set objOSInfo = osvcRemote.ExecQuery("Select ServicePackMajorVersion,Version,OSType FROM Win32_OperatingSystem")
For Each colOSInfo In objOSInfo
intCurrentSP = colOSInfo.ServicePackMajorVersion ‘sp安全補(bǔ)丁版本
intOSver = colOSInfo.Version ‘操作系統(tǒng)版本號(hào)
intOStype = colOSInfo.OSType ‘操作系統(tǒng)類(lèi)型
Next
Socket:如何知道要連接哪個(gè)名字空間,獲得哪些對(duì)象呢?《WMI技術(shù)指南》[3]中分類(lèi)列出了大量常用的對(duì)象??上鼪](méi)有相應(yīng)的電子書(shū),你只有到書(shū)店里找它了。你也可以用WMITools里WMI CIM Studio這個(gè)工具的搜索功能,很容易就能找想要的對(duì)象。找到對(duì)象后,WMI CIM Studio能列出其屬性和方法,然后到MSDN里找具體的幫助。
第四步,獲取當(dāng)前系統(tǒng)已經(jīng)安裝的補(bǔ)丁信息。在“root\cimv2”下,實(shí)例“Win32_QuickFixEngineering”下的“HotFixID”屬性存放了當(dāng)前系統(tǒng)所安裝的補(bǔ)丁信息。
'*******************************************************************
'*讀取目標(biāo)主機(jī)已安裝補(bǔ)丁列表到字符串strFixedList
'*******************************************************************
Dim colQFE, objQFE
Dim strHotFixID, strFixedList, strFind, strNoFixed
Set colQFE = osvcRemote.ExecQuery("SELECT HotFixID FROM Win32_QuickFixEngineering")
第四步,將讀取的用戶(hù)補(bǔ)丁號(hào)存到一數(shù)組變量,然后與我們?cè)凇暗谝徊健岸x的相應(yīng)數(shù)組進(jìn)行匹配,找出當(dāng)前系統(tǒng)未安裝的補(bǔ)丁號(hào)。這部分的實(shí)現(xiàn)比較簡(jiǎn)單,請(qǐng)參考后面的代碼。
第五步,顯示最后檢測(cè)結(jié)果。
至此,整個(gè)補(bǔ)丁檢測(cè)過(guò)程結(jié)束,只要將本腳本文件進(jìn)行點(diǎn)擊運(yùn)行,就可以完成補(bǔ)丁的檢查。特別是對(duì)于已經(jīng)在企業(yè)中建立起Acitve Directory域的網(wǎng)絡(luò)管理員來(lái)說(shuō),只要將此腳本添加到域控制器的組策略里,對(duì)每個(gè)登陸到域的用戶(hù)進(jìn)行補(bǔ)丁檢測(cè),提示用戶(hù)最新補(bǔ)丁信息,再也不用為用戶(hù)沒(méi)有安裝最新補(bǔ)丁而苦惱了,大大提高了企業(yè)內(nèi)部網(wǎng)絡(luò)安全管理。