通过WSUS直接检查Windows更新

时间:2013-02-20 20:19:35

标签: vbscript windows-update

我本月早些时候提出question关于如何使用vbscript检查服务器是否有任何关键更新未决的问题。提供的答案非常有效,我将脚本发送到我们的QA环境以进行其他测试。

服务器可以运行“vault”环境,它无法访问Windows Update Agent,只能通过WSUS直接获取Windows更新。有没有办法让VBScript直接通过WSUS和而不是 Windows Update Agent检查关键更新。

我收到此代码的0x8024402C错误(逻辑来自上一个问题)。它包含在一个子程序中,根据结果给出PASS或FAIL输出。我已经在某些服务器上验证了这一点。

Dim count
count = 0

'Microsoft Magic
Set updateSession = CreateObject("Microsoft.Update.Session")
Set updateSearcher = updateSession.CreateupdateSearcher()
Set searchResult = updateSearcher.Search("IsAssigned=1 and isHidden=0 and IsInstalled=0 and Type='Software'")
'End Microsoft Magic
    If searchResult.Updates.Count <> 0 Then ' If Updates were found
      For i = 0 to searchResult.Updates.Count - 1 'Just count the number of updates
         count = count + 1
      Next
      objResult.Text = "FAIL"
      objComment.Text = "There are " & count & " updates that need to be installed"
    Else
      objResult.Text = "PASS"
      objComment.Text = "All updates are installed"
    End If

  If NOT len(objResult.Text) Then 'Just in case searchResult produces an error
    objResult.Text = "FAIL"
    objComment.Text = "Could not query Windows Update Server"
  End If

至少,有一种方法可以使用我当前的代码检查错误,如果它无法连接到Windows Update代理并输出就像我上面那样,那么我可以继续我的其余脚本?

2 个答案:

答案 0 :(得分:1)

  

服务器可以运行“vault”环境,并且无法访问Windows Update   代理,只能通过WSUS直接获取Windows更新。有没有办法使用VBScript   仅直接通过WSUS检查关键更新,而不是Windows Update Agent。

也许有关建筑的说明会对此有所帮助。每个系统都有一个Windows Update代理。它随操作系统一起提供。 Windows Update Agent完成所有工作,无论是与自动更新通信的家庭系统,在IE中浏览到Windows Update的旧系统,使用控制面板WUApp,还是与WSUS服务器通信 - 它是Windows Update代理,做的工作。

上述脚本与WSUS服务器通信,并根据Windows Update代理向WSUS服务器报告的内容检索信息。

断开连接的系统,我认为对“保险库环境”的引用是指的,不能访问AU / WU / MU,但根据“保险库环境”的大小,有可能在该环境中实现WSUS服务器。 WSUS文档包含有关如何在断开连接的网络中部署和管理WSUS服务器的详细说明。

如果断开连接的网络中没有WSUS服务器,您也可以使用脱机扫描cab(WSUSSCN2.CAB),但重要的是要注意此脱机文件不包含所有更新 - 它包含安全更新,更新汇总和服务包,如果希望获得所有关键更新,则无法满足需求。

答案 1 :(得分:0)

该脚本将(尝试)检查使用相应主机配置的任何更新服务器。如果主机配置为使用WSUS,则脚本将检查该服务器。如果主机配置为检查Microsoft的Windows Update服务器,它将尝试连接到那些。

错误8024402C表示计算机无法连接到已配置的更新服务器。检查您的主机是否配置为使用WSUS:

Const HKLM  = &h80000002
Const wuKey = "SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate"

Set wmi = GetObject("winmgmts://./root/default:StdRegProv")
status = wmi.GetStringValue(HKLM, wuKey, "WUServer", wsus)

If status = 0 Then
  WScript.Echo "Using WSUS: " & wsus
Else
  WScript.Echo "Using Windows Update directly."
End If

然后检查您是否可以连接到相应的服务器(如果需要,将端口80更改为WUServer值中指定的端口):

telnet wsus.example.com 80

或(对于Windows Update):

telnet windowsupdate.microsoft.com 80

请注意,如果没有WSUS,您的主机必须能够连接到MSKB article 885819中列出的所有网址。

还要确保名称解析适用于您的主机。