用vbs實(shí)現(xiàn)確定是否安裝了某個(gè)特定的補(bǔ)丁
更新時(shí)間:2007年03月31日 00:00:00 作者:
問(wèn):
您好,腳本專家!如何使用腳本來(lái)確定是否安裝了某個(gè)特定的補(bǔ)丁?
-- GM
答:
您好,GM。您知道,不久以前這個(gè)問(wèn)題可能被我們“不小心”扔進(jìn)了廢紙簍并且假裝從未看到。為什么?嗯,以前的時(shí)候,我們獲得關(guān)于補(bǔ)丁、快速修復(fù)和其他更新的信息的唯一方法就是使用 WMI 類 Win32_QuickFixEngineering。這樣挺好的,但是由于各種原因,Win32_QuickFixEngineering 偶爾會(huì)丟失確實(shí)已經(jīng)安裝了的補(bǔ)?。桓愀獾氖?,在 Windows 2000 計(jì)算機(jī)上,Win32_QuickFixEngineering 有時(shí)會(huì)處于待命狀態(tài),而不返回任何信息。(如何解決這一問(wèn)題?當(dāng)然是指通過(guò)安裝補(bǔ)丁來(lái)解決。)無(wú)論如何都不能算一件好事。
但是,那些日子都過(guò)去了?,F(xiàn)在,多虧具有重大改進(jìn)的新 Windows Update 服務(wù),要確定計(jì)算機(jī)上已安裝了和尚未安裝哪些更新非常容易。例如,以下腳本可以告訴我們計(jì)算機(jī)上是否已安裝了補(bǔ)丁 Security Update for Windows XP (KB899587):
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
Set objResults = objSearcher.Search("Type='Software'")
Set colUpdates = objResults.Updates
For i = 0 to colUpdates.Count - 1
If colUpdates.Item(i).Title = _
"Security Update for Windows XP (KB899587)" Then
If colUpdates.Item(i).IsInstalled <> 0 Then
Wscript.Echo "This update is installed."
Wscript.Quit
Else
Wscript.Echo "This update is not installed."
Wscript.Quit
End If
End If
Next
Wscript.Echo "This update is not installed."
我們將不詳細(xì)介紹每一行代碼,解釋 Windows Update 服務(wù)的詳細(xì)情況有點(diǎn)超出了本專欄的范圍。如果您想了解有關(guān) Windows Update(尤其是諸如 Microsoft.Update.Session 之類的對(duì)象)的詳細(xì)信息,請(qǐng)參閱我們的“腳本故事”專欄中的我要得到你,我的美人…并且我們也要管理 Windows Update 啦!
但是,我們會(huì)發(fā)現(xiàn),盡管有 Search 方法,但我們并不是真的搜索某個(gè)具體的更新。搜索意味著只去查找所需的項(xiàng),其精確度是極低的。因此我們不能真的那樣做。相反,我們?cè)诖艘龅氖欠祷厮懈碌募希缓蠛Y選整個(gè)集合,查找標(biāo)題為 Security Update for Windows XP (KB899587) 的更新。最終結(jié)果是一樣的,但是我們達(dá)到這一最終結(jié)果的過(guò)程稍有不同。
不,沒(méi)有什么不同。就您想了解的內(nèi)容而言。
那么,我們?cè)诖瞬捎玫倪^(guò)程是什么?嗯,首先使用下面四行代碼來(lái)檢索本地計(jì)算機(jī)的更新集合:
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcherSet
objResults = objSearcher.Search("Type='Software'")
Set colUpdates = objResults.Updates
注意:是的,此腳本可針對(duì)遠(yuǎn)程計(jì)算機(jī)運(yùn)行。有關(guān)詳細(xì)信息,請(qǐng)參閱腳本故事專欄。
檢索該集合之后,設(shè)置一個(gè) For Next 循環(huán)以遍歷所有項(xiàng)。在該循環(huán)內(nèi),使用下面一行代碼來(lái)確定更新的“標(biāo)題”是否為 Security Update for Windows XP (KB899587):
If colUpdates.Item(i).Title = _
"Security Update for Windows XP (KB899587)" Then
我們假定“標(biāo)題”是Security Update for Windows XP (KB899587)。在這種情況下,接下來(lái)要檢查 IsInstalled 屬性的值。如果 IsInstalled 等于 0,則表示實(shí)際沒(méi)有安裝該更新(可能安裝失敗了,也可能安裝了該更新但后來(lái)又刪除了)。如果 IsInstalled 不等于 0,則表示已經(jīng)安裝了該更新。檢查該值,然后回顯相應(yīng)的消息:
If colUpdates.Item(i).IsInstalled <> 0 Then
Wscript.Echo "This update is installed."
Wscript.Quit
Else
Wscript.Echo "This update is not installed."
Wscript.Quit
End If
您會(huì)發(fā)現(xiàn),回顯消息之后,我們就會(huì)終止該腳本。為什么?嗯,更新標(biāo)題是唯一的:既然我們已經(jīng)找到了要查找的更新,就無(wú)需繼續(xù)遍歷剩下的集合了。因此,我們也就終止了腳本,并回到我們的生活中。
如果“標(biāo)題”不是Security Update for Windows XP (KB899587) 怎么辦?在這種情況下,我們只要進(jìn)入下一輪循環(huán)并檢查集合中的下一項(xiàng)即可。如果我們確實(shí)再也找不到具有指定標(biāo)題的更新,則最終會(huì)退出該循環(huán),然后執(zhí)行最后一行代碼,僅報(bào)告沒(méi)有安裝該更新。
您好,腳本專家!如何使用腳本來(lái)確定是否安裝了某個(gè)特定的補(bǔ)丁?
-- GM
答:
您好,GM。您知道,不久以前這個(gè)問(wèn)題可能被我們“不小心”扔進(jìn)了廢紙簍并且假裝從未看到。為什么?嗯,以前的時(shí)候,我們獲得關(guān)于補(bǔ)丁、快速修復(fù)和其他更新的信息的唯一方法就是使用 WMI 類 Win32_QuickFixEngineering。這樣挺好的,但是由于各種原因,Win32_QuickFixEngineering 偶爾會(huì)丟失確實(shí)已經(jīng)安裝了的補(bǔ)?。桓愀獾氖?,在 Windows 2000 計(jì)算機(jī)上,Win32_QuickFixEngineering 有時(shí)會(huì)處于待命狀態(tài),而不返回任何信息。(如何解決這一問(wèn)題?當(dāng)然是指通過(guò)安裝補(bǔ)丁來(lái)解決。)無(wú)論如何都不能算一件好事。
但是,那些日子都過(guò)去了?,F(xiàn)在,多虧具有重大改進(jìn)的新 Windows Update 服務(wù),要確定計(jì)算機(jī)上已安裝了和尚未安裝哪些更新非常容易。例如,以下腳本可以告訴我們計(jì)算機(jī)上是否已安裝了補(bǔ)丁 Security Update for Windows XP (KB899587):
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
Set objResults = objSearcher.Search("Type='Software'")
Set colUpdates = objResults.Updates
For i = 0 to colUpdates.Count - 1
If colUpdates.Item(i).Title = _
"Security Update for Windows XP (KB899587)" Then
If colUpdates.Item(i).IsInstalled <> 0 Then
Wscript.Echo "This update is installed."
Wscript.Quit
Else
Wscript.Echo "This update is not installed."
Wscript.Quit
End If
End If
Next
Wscript.Echo "This update is not installed."
我們將不詳細(xì)介紹每一行代碼,解釋 Windows Update 服務(wù)的詳細(xì)情況有點(diǎn)超出了本專欄的范圍。如果您想了解有關(guān) Windows Update(尤其是諸如 Microsoft.Update.Session 之類的對(duì)象)的詳細(xì)信息,請(qǐng)參閱我們的“腳本故事”專欄中的我要得到你,我的美人…并且我們也要管理 Windows Update 啦!
但是,我們會(huì)發(fā)現(xiàn),盡管有 Search 方法,但我們并不是真的搜索某個(gè)具體的更新。搜索意味著只去查找所需的項(xiàng),其精確度是極低的。因此我們不能真的那樣做。相反,我們?cè)诖艘龅氖欠祷厮懈碌募希缓蠛Y選整個(gè)集合,查找標(biāo)題為 Security Update for Windows XP (KB899587) 的更新。最終結(jié)果是一樣的,但是我們達(dá)到這一最終結(jié)果的過(guò)程稍有不同。
不,沒(méi)有什么不同。就您想了解的內(nèi)容而言。
那么,我們?cè)诖瞬捎玫倪^(guò)程是什么?嗯,首先使用下面四行代碼來(lái)檢索本地計(jì)算機(jī)的更新集合:
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcherSet
objResults = objSearcher.Search("Type='Software'")
Set colUpdates = objResults.Updates
注意:是的,此腳本可針對(duì)遠(yuǎn)程計(jì)算機(jī)運(yùn)行。有關(guān)詳細(xì)信息,請(qǐng)參閱腳本故事專欄。
檢索該集合之后,設(shè)置一個(gè) For Next 循環(huán)以遍歷所有項(xiàng)。在該循環(huán)內(nèi),使用下面一行代碼來(lái)確定更新的“標(biāo)題”是否為 Security Update for Windows XP (KB899587):
If colUpdates.Item(i).Title = _
"Security Update for Windows XP (KB899587)" Then
我們假定“標(biāo)題”是Security Update for Windows XP (KB899587)。在這種情況下,接下來(lái)要檢查 IsInstalled 屬性的值。如果 IsInstalled 等于 0,則表示實(shí)際沒(méi)有安裝該更新(可能安裝失敗了,也可能安裝了該更新但后來(lái)又刪除了)。如果 IsInstalled 不等于 0,則表示已經(jīng)安裝了該更新。檢查該值,然后回顯相應(yīng)的消息:
If colUpdates.Item(i).IsInstalled <> 0 Then
Wscript.Echo "This update is installed."
Wscript.Quit
Else
Wscript.Echo "This update is not installed."
Wscript.Quit
End If
您會(huì)發(fā)現(xiàn),回顯消息之后,我們就會(huì)終止該腳本。為什么?嗯,更新標(biāo)題是唯一的:既然我們已經(jīng)找到了要查找的更新,就無(wú)需繼續(xù)遍歷剩下的集合了。因此,我們也就終止了腳本,并回到我們的生活中。
如果“標(biāo)題”不是Security Update for Windows XP (KB899587) 怎么辦?在這種情況下,我們只要進(jìn)入下一輪循環(huán)并檢查集合中的下一項(xiàng)即可。如果我們確實(shí)再也找不到具有指定標(biāo)題的更新,則最終會(huì)退出該循環(huán),然后執(zhí)行最后一行代碼,僅報(bào)告沒(méi)有安裝該更新。
相關(guān)文章
VBS教程:正則表達(dá)式簡(jiǎn)介 -正則表達(dá)式
VBS教程:正則表達(dá)式簡(jiǎn)介 -正則表達(dá)式...2006-11-11VBS ArrayList Class vbs中的數(shù)組類
VBS ArrayList Class vbs中的數(shù)組類...2007-03-03用vbs實(shí)現(xiàn)本地連接禁用/啟用腳本代碼
用vbs實(shí)現(xiàn)本地連接禁用/啟用腳本代碼...2007-03-03VBS遍歷文件或文件夾路徑輸入文件的所有絕對(duì)路徑(附源碼)
這篇文章主要介紹了VBS遍歷文件或文件夾路徑輸入文件的所有絕對(duì)路徑的代碼,需要的朋友可以參考下2019-12-12vbs qq自動(dòng)發(fā)信息增強(qiáng)版
這篇文章主要介紹了vbs qq自動(dòng)發(fā)信息增強(qiáng)版,需要的朋友可以參考下2014-05-05右鍵發(fā)送(sendto),創(chuàng)建快捷方式到自定義的位置
右鍵發(fā)送(sendto),創(chuàng)建快捷方式到自定義的位置...2007-03-03自動(dòng)刪除超過(guò)10天的文件及文件夾的vbs代碼
自動(dòng)刪除超過(guò)10天的文件及文件夾vbs,主要是針對(duì)一些沒(méi)有用的文件夾。2009-11-11