1

本月早些时候,我提出了一个关于如何使用 vbscript 检查服务器是否有任何关键更新待处理的问题。提供的答案效果很好,我将脚本发送到我们的 QA 环境进行额外测试。

有一个服务器可以运行的“保险库”环境,它无法访问 Windows 更新代理,只能通过 WSUS 直接获取 Windows 更新。VBScript 有没有办法直接通过 WSUS 而不是Windows 更新代理检查关键更新。

我收到此代码的 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 更新代理并像我在上面所做的那样输出,那么我当前的代码是否有办法检查错误,这样我就可以继续我的脚本的其余部分?

4

2 回答 2

1

有一个服务器可以运行的“保险库”环境,它无法访问 Windows 更新代理,只能通过 WSUS 直接获取 Windows 更新。VBScript 有没有办法直接通过 WSUS 而不是 Windows 更新代理检查关键更新。

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

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

断开连接的系统(我相信“保险库环境”所指的内容)无法访问 AU/WU/MU,但根据“保险库环境”的大小,可以实施 WSUS该环境中的服务器。WSUS 文档包含有关如何在断开连接的网络中部署和管理 WSUS 服务器的详细说明。

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

于 2013-02-27T13:34:40.257 回答
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 更新):

telnet windowsupdate.microsoft.com 80

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

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

于 2013-02-21T10:00:43.550 回答