我在 Stack Overflow 上问过这个问题,但他们说我在这里会更幸运。我正在使用 VBScript 来自动执行许多服务器任务,我只是在检查以确保服务器构建团队在实际使用服务器之前完成了他们的工作。
我需要做的其中一项任务是检查是否有任何关键更新。这似乎很容易,但我遇到了很多麻烦。我不熟悉 WSUS,我从未处理过它,但我需要与它通信。
以下是我的 vbscript 中针对此类逻辑的内容
'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 Err.Number <> 0 Then ' If errors
objResult.Text = "FAIL. Cannot connect to WSUS. Error: " & Err.Number
Err.Clear
Else ' No Errors'
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. There are " & count & " updates that need to be installed"
Else
objResult.Text = "PASS. All updates are installed"
End If
If NOT len(objResult.Text) Then 'Just in case searchResult produces an error
objResult.Text = "FAIL. Could not query Windows Update Server"
End If
End If
输出被发送到 XML 文件。无论如何,在我的测试服务器和其他服务器上我尝试过它(只有另外两个)。它似乎工作正常并且通过了。在生产中,我得到了很多错误,我得到了
失败。无法查询 Windows 更新服务器
因此,发生的情况是它无法连接到 Windows 更新 - 对象“Microsoft.Update.Session”使用 Windows 更新代理来管理更新是由 Windows 更新还是 WSUS 处理,但有时它就是不这样做,而我没有解释,甚至不知道我能做什么。
几天来我一直在尝试解决这个问题,但是我很难测试它并看到它失败,我只是接到一个电话说一个计划用于生产的服务器在本不应该发生故障的情况下失败了。
有什么建议吗?如果需要,我可以提供更多信息以澄清问题。
答案1
逻辑看起来不错;它应该经过所有的 if-else 语句才能到达“FAIL。无法查询 Windows 更新服务器”文本。
首先,删除最后一个 if 语句,看看是否有任何打印输出。它看起来好像覆盖了你的输出。
之后,我还将尝试设置 isInstalled=1 以确保它正确读取 MS magic。