如何知道计算机上已经安装了哪些服务包?

来源:百度文库 编辑:神马文学网 时间:2024/06/30 20:26:15
问:
嗨,Scripting Guy!如何知道计算机上已经安装了哪些服务包?
-- FR
答:
嗨,FR。这个问题问得好;现在大家都知道,确保自己的计算机安装了来自 Windows Update 的最新服务包、热修补程序和下载非常重要。但就像您说的,怎样才能做到这点呢?
您的想法比我们超前:对啊,脚本编写正是跟踪此信息的好办法。例如,以下脚本可报告计算机上安装的最新服务包:
strComputer = "."Set objWMIService = GetObject("winmgmts:" _& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")Set colOperatingSystems = objWMIService.ExecQuery _("Select * from Win32_OperatingSystem")For Each objOperatingSystem in colOperatingSystemsWscript.Echo objOperatingSystem.ServicePackMajorVersion _& "." & objOperatingSystem.ServicePackMinorVersionNext
现在,您可能在想:“哦,最新服务包。但我需要知道的是计算机上安装的所有服务包。”如果是这样,也不用紧张;打个比方吧,当您安装 Service Pack 3.0 时,Service Packs 1.0 和 2.0 也会自动安装的。因此,您根本不用担心 Service Pack 1.0 有没有安装,通过安装 Service Pack 3.0,您就可以获得 Service Pack 1.0 的全部功能。解释得是费劲了点,不过这就是说您需要关心的就是计算机上有没有安装最新服务包。而这就是上述脚本所做的。
但是上面提到的那些热修补程序呢?如何审核计算机并查看那种了哪些热修补程序?用以下脚本试试:
strComputer = "."Set objWMIService = GetObject("winmgmts:" _& "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")Set colQuickFixes = objWMIService.ExecQuery _("Select * from Win32_QuickFixEngineering")For Each objQuickFix in colQuickFixesWscript.Echo "Computer: " & objQuickFix.CSNameWscript.Echo "Description: " & objQuickFix.DescriptionWscript.Echo "Hot Fix ID: " & objQuickFix.HotFixIDWscript.Echo "Installation Date: " & objQuickFix.InstallDateWscript.Echo "Installed By: " & objQuickFix.InstalledByNext
这里有两件事情需要注意。首先,热修补程序并不总是以标准形式发布。这不是说它们就不能工作,只是说有些热修补程序可能没有填充上述所有字段;例如,很多热修补程序不返回 InstallDate 属性的值。其次,热修补程序信息被记录在计算机上的几个位置,并且由于并不总是有标准的记录方式,因此 WMI 会检查所有这些位置,并检索热修补程序信息。一切都很好,例外情况是某个热修补程序将信息记录在多个位置。再说一遍,这并不是问题;只是意味着您从 WMI 获取信息时,可能需要检查热修补程序 QFE 1111111 的 2 或 3 个实例。因为 QFE 1111111 会在几个不同的位置记录自己的信息。
嗨,有一个情况:我们刚才不是提到 Windows Update 吗?那好,如果您安装了最新版 Windows Update,那么您可能有一个新的 COM 对象可以用来检索更新信息。例如:
Set objSession = CreateObject("Microsoft.Update.Session")Set objSearcher = objSession.CreateUpdateSearcherintHistoryCount = objSearcher.GetTotalHistoryCount‘Wscript.Echo intHistoryCountSet colHistory = objSearcher.QueryHistory(1, intHistoryCount)For Each objEntry in colHistoryWscript.Echo "Operation: " & objEntry.OperationWscript.Echo "Result code: " & objEntry.ResultCodeWscript.Echo "Date: " & objEntry.DateWscript.Echo "Title: " & objEntry.TitleWscript.Echo "Description: " & objEntry.DescriptionWscript.Echo "Client application ID: " & objEntry.ClientApplicationIDWscript.Echo "Server selection: " & objEntry.ServerSelectionWscript.Echo "Service ID: " & objEntry.ServiceIDi = 1For Each strStep in objEntry.UninstallationStepsWscript.Echo i & " -- " & strStepi = i + 1NextWscript.Echo "Uninstallation notes: " & objEntry.UninstallationNotesWscript.Echo "Support URL: " & objEntry.SupportURLWscript.EchoNext
老实说,我们只知道 Microsoft.Update.Session 对象会安装在 Windows XP 上(并且是在您安装 XP Service Pack 2 时自动安装)。如果您运行的是 Windows 2000,您可能需要访问 Windows Update,安装最新版本,然后运行上述脚本,看看它是否有效。