Vbscript 直接通过WSUS检查windows更新

Vbscript 直接通过WSUS检查windows更新,vbscript,windows-update,Vbscript,Windows Update,本月早些时候,我就如何使用vbscript检查服务器是否有任何关键更新挂起进行了讨论。提供的答案非常有效,我将脚本发送到我们的QA环境进行额外测试 服务器可以在“vault”环境中运行,它无权访问Windows Update Agent,只能通过WSU直接获取Windows更新。VBScript是否有办法只通过WSUS直接检查关键更新,而不是通过Windows Update代理 我收到一个带有此代码的0x8024402C错误(逻辑取自上一个问题)。它被包装在一个子例程中,该子例程将根据结果给出通

本月早些时候,我就如何使用vbscript检查服务器是否有任何关键更新挂起进行了讨论。提供的答案非常有效,我将脚本发送到我们的QA环境进行额外测试

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

我收到一个带有此代码的0x8024402C错误(逻辑取自上一个问题)。它被包装在一个子例程中,该子例程将根据结果给出通过或失败输出。我已经在一些服务器上验证了这一点

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
Dim计数
计数=0
“微软魔术
Set updateSession=CreateObject(“Microsoft.Update.Session”)
Set updatesarcher=updateSession.createUpdatesarcher()
设置searchResult=updatesarcher.Search(“IsAssigned=1,isHidden=0,IsInstalled=0,Type='Software'))
“终结微软的魔力
如果searchResult.Updates.Count为0,则“如果找到更新”
对于i=0的searchResult.Updates.Count-1'只需计算更新的数量
计数=计数+1
下一个
objResult.Text=“失败”
objectcomment.Text=“有”&count&“需要安装的更新”
其他的
objResult.Text=“通过”
objectcomment.Text=“所有更新都已安装”
如果结束
如果不是len(objResult.Text),则“以防万一searchResult产生错误”
objResult.Text=“失败”
objComment.Text=“无法查询Windows Update服务器”
如果结束
至少,如果我的当前代码无法连接到Windows Update Agent并像上面所做的那样输出,那么是否有方法检查错误,以便我可以继续使用脚本的其余部分?

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

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

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值中指定的端口):

或(对于Windows Update):

请注意,如果没有WSU,您的主机必须能够连接到中列出的所有URL

还要确保名称解析在主机上工作。

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

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

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值中指定的端口):

或(对于Windows Update):

请注意,如果没有WSU,您的主机必须能够连接到中列出的所有URL

还要确保名称解析在主机上有效

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

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

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

断开连接的系统(我认为“vault环境”指的是断开连接的系统)无法访问AU/WU/MU,但根据“vault环境”的大小,可以在该环境中实现WSUS服务器。WSUS文档包括有关如何在断开连接的网络中部署和管理WSUS服务器的详细说明

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

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

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

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

一个断开连接的系统,我相信这就是所谓的“保险库”
telnet windowsupdate.microsoft.com 80