您好,JP。您知道吗,您提出的这个问题恰当其时;这是因为我们刚刚发布了脚本故事专栏,此专栏将向脚本编者介绍 Windows Update 对象模型,并提供了管理“自动更新”的大量脚本示例。尽管文章中没有脚本可以返回有关计算机应用的最后更新的信息,编写此类脚本却相当简单:
Set objSession = CreateObject("Microsoft.Update.Session")
Set objSearcher = objSession.CreateUpdateSearcher
Set colHistory = objSearcher.QueryHistory(1, 1)
For Each objEntry in colHistory
Wscript.Echo "Title: " & objEntry.Title
Wscript.Echo "Update application date: " & objEntry.Date
Next
这一小段脚本是如何发挥作用的?问得好:我们正要解释。我们先创建一个 Microsoft.Update.Session 对象的实例。创建此对象之后,即可调用 CreateUpdateSearcher 方法。这样,就可得到 Searcher 对象的一个实例,此对象可以搜索计算机已应用的所有更新。这正是我们要做的。
接下来,我们将使用 QueryHistory 方法检索所需的更新:
Set colHistory = objSearcher.QueryHistory(1, 1)
正如您所看到的,我们在此脚本中向 QueryHistory 传递两个参数:1 和 1。第一个 1 告诉脚本从更新历史中的第 1 条记录开始搜索;第二个 1 告诉脚本搜索完第 1 条记录后停止搜索。(也就是在开始搜索第 2 条记录前。)这么做的原因何在?更新是按时间先后逆序存储的,最新的更新是第 1 条记录,而最开始应用的更新是最后一条记录。由于我们需要的只是有关最新更新的信息,将返回数据限制为该条记录可使此脚本运行得稍微快点。
|
注意。应当指出的是,检索计算机的全部更新历史很简单,实际上脚本故事专栏中有可完成此操作的脚本。 |
调用 QueryHistory 方法后,我们会获得一个由单个项目组成的集合(名为 colHistory),此项目刚好表示计算机应用的最新更新。现在剩下的工作就是遍历此集合(是的,即使仅含一个项目,从技术上说它仍是一个集合)并回显更新标题和应用更新的日期:
For Each objEntry in colHistory
Wscript.Echo "Title: " & objEntry.Title
Wscript.Echo "Update application date: " & objEntry.Date
Next
换言之,告诉我们 Windows Update 对这台特定计算机执行操作的最后时间。
顺便说一句,Windows Update 对象模型较为混杂:有些对象可在远程计算机上创建并可用于远程计算机而另一些则不可以。幸运的是,此脚本可以在远程计算机上运行。要执行此操作,只需在 CreateObject 中将远程计算机的名称添加为第二个参数。例如,下行代码将使脚本在远程计算机 atl-dc-01 上运行:
Set objSession = CreateObject("Microsoft.Update.Session", "atl-dc-01")
因此,检索 atl-dc-01 最新更新的完整脚本如下所示:
Set objSession = CreateObject("Microsoft.Update.Session", "atl-dc-01")
Set objSearcher = objSession.CreateUpdateSearcher
Set colHistory = objSearcher.QueryHistory(1, 1)
For Each objEntry in colHistory
Wscript.Echo "Title: " & objEntry.Title
Wscript.Echo "Update application date: " & objEntry.Date
Next
人们认为管理修补程序很难。现在不再难了!