Я задал этот вопрос в 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, но иногда это просто не так. не делаю этого, и у меня нет объяснений или даже того, что я могу сделать.
Я пытался решить эту проблему несколько дней, но мне трудно проверить это и увидеть, что это не удается, я просто получаю телефонный звонок о том, что сервер, намеченный для производства, не работает, хотя это не должно быть.
Какие-либо предложения? Если потребуется, я могу предоставить дополнительную информацию для ясности.
Логика выглядит неплохо; ему необходимо пройти через все операторы if-else, чтобы добраться до текста «FAIL. Не удалось запросить сервер обновления Windows».
Сначала подумайте, удалите последний оператор if и посмотрите, есть ли у вас распечатка. Похоже, он перезаписывает ваш вывод.
После этого я бы также попробовал установить isInstalled = 1, чтобы убедиться, что он правильно читает магию MS.