Сценарий такой: Server1 и Server2, оба работают под управлением Windows Server 2012 R2 с одним и тем же уровнем исправлений, в настоящее время находятся в кластере балансировки нагрузки. У Server1 есть проблемы с приложениями, и советуем заменить его. Он был извлечен из кластера, и Server3 предоставляется в качестве замены.
Когда изначально были созданы Server1 и Server2, решение для управления исправлениями не использовалось. Они были построены в одно время и просто исправлены до последнего на тот момент уровня.
Цель состоит в том, чтобы установить исправление Server3 на тот же уровень, что и Server2..
Как уже упоминалось, решение для управления исправлениями недоступно.
Просматривать обновления на Server2 одно за другим и применять их к Server3, конечно, вариант, но мы должны иметь возможность сделать что-то лучше, чем это. В конце концов, это же 2017 год.
Можно получить список всех обновлений на Server2 через PowerShell и по номеру KB, и этот список доступен.
Но как потом скачать и применить эти обновления, и только эти обновления, на Server3?
Первоначальное исследование выявило ряд сценариев обновления Windows, как VBS, так и PowerShell, но все они терпят неудачу при критическом требовании, согласно которому не должны применяться все текущие обновления.
Приведение уровня исправлений Server2 к текущему состоянию, то же самое и для Server3, также является вариантом, но я бы предпочел избегать его из-за необходимости планировать время простоя / обслуживания (в кластере нет жизнеспособного Server1), а затем кучу тестирование приложений. Оставим это в крайнем случае.
Ну и что являются мои разумные варианты автоматизации этого разумным способом с учетом вышеуказанных ограничений?
Чистильщик наверное для установки WSUS. Затем вы можете использовать для этого модуль WSUS PowerShell. Этот сценарий просматривает локально установленные обновления, подключается к WSUS, а затем утверждает эти обновления для определенной группы в WSUS:
$servername = <ip of WSUS>
$port = "8530"
$groupname = <name of server group>
# Import Libraries
[void][reflection.assembly]::LoadWithPartialName("Microsoft.UpdateServices.Administration")
# Connect to WSUS
$wsus = [Microsoft.UpdateServices.Administration.AdminProxy]::getUpdateServer($servername, $False, $port)
# Connect to local Update Service
$Session = New-Object -ComObject "Microsoft.Update.Session"
$Searcher = $Session.CreateUpdateSearcher()
$historyCount = $Searcher.GetTotalHistoryCount()
$installedUpdates = $Searcher.QueryHistory(0, $historyCount) | Select-Object Title
# Approve all locally installed updates in WSUS
foreach ($installedUpdate in $installedUpdates) {
$update = $wsus.SearchUpdates($installedUpdate)
$group = $wsus.GetComputerTargetGroups() | where {$_.Name -eq $groupname}
$update[0].Approve(“Install”,$group)
}
Вы также можете записать все локальные обновления в файл:
$filename = <path>
$Session = New-Object -ComObject "Microsoft.Update.Session"
$Searcher = $Session.CreateUpdateSearcher()
$historyCount = $Searcher.GetTotalHistoryCount()
$installedUpdates = $Searcher.QueryHistory(0, $historyCount) | Select-Object Title
$installedUpdates | Export-Csv $filename
Затем скопируйте этот файл на другой сервер и запустите что-то вроде этого: https://msdn.microsoft.com/en-us/library/windows/desktop/aa387101(v=vs.85).aspx
я точно уверен этот это то, что вы ищете.
Сначала запустите на сервере 2, чтобы получить список номеров КБ, затем запустите сервер 3 и передайте эти номера КБ.
Но как затем загрузить и применить эти обновления, и только эти обновления, к Server3?
Вы проверяете Каталог Центра обновления Майкрософт (Обратите внимание, что сайт работает только в IE)? Вы можете найти любое обновление по идентификатору KB, добавить его в корзину, а затем скачать все. Думаю, вы даже можете автоматизировать добавление обновлений в корзину по идентификатору KB.
Имея список необходимых обновлений, задача становится довольно простой. Примечание: systeminfo
util не отражает обновления, которые были заменены новыми - то, что требуется.
UPD. Лучший способ работы для автоматической загрузки обновлений по идентификатору KB описано здесь. Но он не исключал ручного труда. Microsoft борется с прямой загрузкой обновлений.