打印

[原创] 浅谈如何利用脚本察看hotfix的安装情况

浅谈如何利用脚本察看hotfix的安装情况

浅谈如何利用脚本察看hotfix的安装情况
# g! Y6 P9 F) G$ U/ z# a最近在忙于day light saving (夏时制)的补丁安装工作,写了一个脚本来察看该补丁是否已经安装。因此也对如何利用脚本来检查远程计算机的hotfix安装情况作了一下大概的研究。写下此文希望对大家有帮助。
. }5 j1 K( _+ c0 o# f; o# j# Z' y" b5 W9 w6 |0 c
第一个方法通过查询wmi的Win32_QuickFixEngineering 对象,举例如下
复制内容到剪贴板
代码:
strComputer = "."
Set objWMIService = GetObject("winmgmts:" _
& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")
Set colQuickFixes = objWMIService.ExecQuery _
("Select * from Win32_QuickFixEngineering")
For Each objQuickFix in colQuickFixes
Wscript.Echo "-----------------------------"
Wscript.Echo "Computer: " & objQuickFix.CSName
Wscript.Echo "Description: " & objQuickFix.Description
Wscript.Echo "Hot Fix ID: " & objQuickFix.HotFixID
Wscript.Echo "Installation Date: " & objQuickFix.InstallDate
Wscript.Echo "Installed By: " & objQuickFix.InstalledBy
Next
这是最简单的方法,不过有一个缺点就是安装日期与安装人往往是空的,不会显示出来。也就是说,如果只是查询某脚本是否安装了,用这种方法最简单。
; `, _6 o& z7 z" Y3 U: Q# v* G5 I
8 K4 }) S* X& D( f: Z第二种方法是查询注册表的hotfix栏目
+ H; H7 f4 v2 A5 {% p7 Q/ s
9 a$ ?' o3 p( m% D6 {可以通过查询这个目录下的条目来判断是否某个hotfix 已经安装
j; I( @2 b5 m5 N4 JHKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\HOTFIX
+ a/ ]4 N. m x4 N, l! q2 }9 O具体如何使用vbscript来查询远程计算机的注册表这里就不详细叙述了,大家参看微软网站的例子就可以了。 k0 U1 ~, N1 K: \( p

0 @* z% @; a. }- ]/ ^这种方式比第一种方式复杂些,毕竟通过注册表来查询稍微麻烦点儿。而且得到的结果也差不多,虽然注册表中有相关的键值表示安装日期与安装人,但也往往是空的。8 f \ \8 V' Y7 W0 l
我在脚本天堂贴的哪个hotfix的帖子就是通过这种方式来做的。大家感兴趣的话可以下载看看。* [ W+ E6 x" c6 Z4 T, ?
6 k! G# @1 U7 S0 c( E
7 l" [7 G7 M g: @& o
第三种方式 也是通过注册表来查询
+ _% ?- i& g5 B9 i y1 a% _昨天一个同事问我,他除了想知道该脚本是否安装还想知道是什么时候安装的?通过前两种方法都无法得知安装时间。于是我想到了注册表中的uninstall目录,通过查询该目录下的条目,果然可以得到安装时间。: G/ _! `$ c& x* e7 f( c5 Y/ v
: `8 D2 O) T N/ O: E& [
该目录在 HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ 6 c4 k3 r$ Z" P; |7 Z. w& w6 J% i- |

( O4 Q: s6 e: i大家可以搜寻每个子条目的displayname 来确定hotfix然后查询 installdate 来得到安装时间。
' d# ^( u: L0 q% N: u( R0 a6 Z @7 j" h- k
不过这么做也可能有一个问题,某些(极少)的hotfix是不可以uninstall的,因此是否能够查询到,还待考证。
! l K. h) _9 M1 ~" b% G
5 \- I) \, s4 E. Q/ k! M希望此文能够对大家有所帮助。3 ~; j7 C/ u, ?2 V* d5 s; t8 D

! P, x5 G; ]: V. r) q" A/ KMwpq 写于菊花论坛,如转载请标明来源,谢谢。
* h" I/ s) E3 p
0 a& N) H/ H) I[ 本帖最后由 mwpq 于 2007-9-21 05:07 编辑 ]
《无量寿经·第十八愿》言:
设我得佛,十方众生,至心信乐,欲生我国,乃至十念,若不生者,不取正觉。唯除五逆,诽谤正法。

TOP

补充一点!上述的方法对于vista 还是有问题,因为hotfix 在vista来说并没有放在注册表的 uninstall下面5 ?( R. {+ A5 ]+ A1 c/ P
可以用这个脚本来做
复制内容到剪贴板
代码:
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
intHistoryCount = objSearcher.GetTotalHistoryCount
Set colHistory = objSearcher.QueryHistory(1, intHistoryCount)
For Each objEntry in colHistory
if instr(objEntry.Title,"KB933360") then
wscript.echo = objEntry.Date
end if
Next
如果需要查询远程计算家则第一句改为
复制内容到剪贴板
代码:
Set objSession = CreateObject("Microsoft.Update.Session","remotePCName")

[ 本帖最后由 mwpq 于 2007-9-28 13:28 编辑 ]
《无量寿经·第十八愿》言:
设我得佛,十方众生,至心信乐,欲生我国,乃至十念,若不生者,不取正觉。唯除五逆,诽谤正法。

TOP