Как узнать, сколько обновлений ожидает установки на удаленном сервере?
Есть ли способ узнать, загрузил ли Windows Server (2003, 2008) обновления Microsoft Windows и ждет ли пользователь подтверждения "Установить обновления и перезагрузить сервер"?
Мы используем WSUS и SSCM для сбора и публикации обновлений, и большинство серверов автоматически устанавливаются в воскресенье утром, в основном это сервер разработки и тестирования.
Мы настроили наши важные производственные серверы на установку только вручную, но иногда некоторые серверы не перезагружаются вручную некоторое время (люди забывают!)
Было бы неплохо, если бы был какой-то метод (сценарий powershell, WMI-запрос, некоторая магическая команда), который я мог бы использовать для подсчета или обнаружения там, где ожидают обновления.
5 ответов
Вот сценарий, который я написал. Он скажет вам:
- Сколько патчей ожидает установки
- Если патчи потребуют перезагрузки
- Если сервер в настоящее время ожидает перезагрузки, чтобы включить исправления
Пример использования: C:\> cscript ServerPendingUpdates.vbs myserver01 myserver02
Connecting to myserver01 to check software update status...
myserver01 has 2 updates pending installation
myserver01 WILL need to be rebooted to complete the installation of these updates.
myserver01 is waiting for a REBOOT to complete a previous installation.
<snip>
Автор сценария:
'#
'# ServerPendingUpdates.vbs
'#
'# Usage: cscript ServerPendingUpdates.vbs {servername} {servername} {servername} {servername}
'# If no {servername} specified then 'localhost' assumed
'#
'# To do: Error handling
'#
Option Explicit
Dim strServer : strServer = GetArgValue(0,"localhost")
'#
'# Loop through the input parameters for each server
'#
Dim i
For i = 0 To WScript.Arguments.Count - 1
CheckServerUpdateStatus GetArgValue(i,"localhost") 'strServer
Next
WScript.Quit(0)
Function CheckServerUpdateStatus( ByVal strServer )
WScript.Echo vbCRLF & "Connecting to " & strServer & " to check software update status..."
Dim blnRebootRequired : blnRebootRequired = False
Dim blnRebootPending : blnRebootPending = False
Dim objSession : Set objSession = CreateObject("Microsoft.Update.Session", strServer)
Dim objUpdateSearcher : Set objUpdateSearcher = objSession.CreateUpdateSearcher
Dim objSearchResult : Set objSearchResult = objUpdateSearcher.Search(" IsAssigned=1 and IsHidden=0 and Type='Software'")
'#
'#
'#
Dim i, objUpdate
Dim intPendingInstalls : intPendingInstalls = 0
For i = 0 To objSearchResult.Updates.Count-1
Set objUpdate = objSearchResult.Updates.Item(I)
If objUpdate.IsInstalled Then
If objUpdate.RebootRequired Then
blnRebootPending = True
End If
Else
intPendingInstalls = intPendingInstalls + 1
'If objUpdate.RebootRequired Then '### This property is FALSE before installation and only set to TRUE after installation to indicate that this patch forced a reboot.
If objUpdate.InstallationBehavior.RebootBehavior <> 0 Then
'# http://msdn.microsoft.com/en-us/library/aa386064%28v=VS.85%29.aspx
'# InstallationBehavior.RebootBehavior = 0 Never reboot
'# InstallationBehavior.RebootBehavior = 1 Must reboot
'# InstallationBehavior.RebootBehavior = 2 Can request reboot
blnRebootRequired = True
End If
End If
Next
WScript.Echo strServer & " has " & intPendingInstalls & " updates pending installation"
If blnRebootRequired Then
WScript.Echo strServer & " WILL need to be rebooted to complete the installation of these updates."
Else
WScript.Echo strServer & " WILL NOT require a reboot to install these updates."
End If
'#
'#
'#
If blnRebootPending Then
WScript.Echo strServer & " is waiting for a REBOOT to complete a previous installation."
End If
End Function
'#
'#
'#
Function GetArgValue( intArgItem, strDefault )
If WScript.Arguments.Count > intArgItem Then
GetArgValue = WScript.Arguments.Item(intArgItem)
Else
GetArgValue = strDefault
End If
End Function
Как администратор удаленного окна, откройте MMC, а затем добавьте оснастку "Просмотр событий". Выберите "Другой компьютер" (вместо значения по умолчанию "Локальный компьютер" и введите имя целевого компьютера. Затем отфильтруйте по типу события, чтобы увидеть только те, которые вам нужны! Он называется "Агент обновления Windows", и описание начнется с
"Установка готова: следующие обновления загружены и готовы к установке. В настоящее время на компьютере запланировано установить эти обновления [дата]..."
Вы можете использовать http://wuinstall.com/. У него есть ключ / search, чтобы увидеть, ожидают ли обновления. Вы можете выполнить удаленно с psexec.
Другой вариант - проанализировать%windir%\windowsupdate.log и найти что-то вроде этого: # ПРЕДУПРЕЖДЕНИЕ: установка вызова завершена, требуется перезагрузка = да, ошибка = 0x00000000
Я использую скрипт UpdateHf.vbs, созданный Робом Данном и участниками. Поскольку он запускается локально на хосте, о котором он сообщает, он установлен на всех моих машинах. Я создал пакет MSI и протолкнул его через GPO.
Для запуска отчетов у меня есть коллекция сценариев PowerShell, которые создают запланированные задачи на серверах OU, где каждый компьютер должен запускать UpdateHF.vbs локально и отправлять мне результаты по электронной почте. Затем я использую правила сортировки для цветовой кодировки получаемых писем на основе поиска отличительного текста в отчете.
UpdateHF.vbs - это, по сути, оболочка для опубликованного API автоматического обновления Microsoft, поэтому, поспорив, вы могли бы выяснить, какой бит сценария обрабатывает проверку "Reboot Pending", если вам нужен только логический флаг состояния перезагрузки.
Вот ядро моей системы: Powershell заполняет переменные при вызове schtasks.exe. (Обратите внимание, что если пароль содержит сложные символы, вам нужно экранировать их с помощью обратного кавычка.)
schtasks.exe /create /F /S $TargetHost /tn Patch /sc once /st $TargetTime /sd $StartDate /ru User /rp Password /tr "$WinPath\system32\cscript.exe $WinPath\UpdateHF.vbs $UpdateArgs"
В 2012 R2 сервер перейдите в Панель управления, нажмите на Обновления Windows. На левой панели страницы нажмите на ссылку "Проверить наличие обновлений", вы увидите список ожидающих обновлений (которые еще не установлены на сервере). Нажмите на любую ссылку, которую вы получите, чтобы увидеть полный (необязательный и обязательный) список с кратким описанием для каждого из них.
Обратите внимание, что для этой автоматической установки обновления должны быть включены.