Как автоматизировать управление исправлениями в Windows
В принципе системные администраторы могут сверять часы по времени выхода ежемесячного патча Windows, и нельзя сказать, что они ждут этого момента с нетерпением. Именно для таких рутинных задач как управление исправлениями в Windows хочется использовать автоматизацию, чтобы освободить свое время и избавиться от монотонной работы.
Существует множество продуктов, которые помогут вам установить патчи Windows на свои системы, но они обычно отличаются достаточно негуманной стоимостью. Если вы не можете позволить себе эти предложения, то альтернативным вариантом представляется решение запустить собственную автоматическую процедуру обновления Windows. Используя PowerShell, ИТ-специалисты могут тестировать, развертывать и проверять обновления Windows на сотнях компьютеров, используя только приемы PowerShell и некоторые готовые модули.
Необходимые условия для автоматического управления исправлениями в Windows
Для реализации задумки у вас должны быть установлены:
- Windows PowerShell 5.1 на клиенте;
- PowerShell Remoting, с доступном на удаленных системах для установки патчей;
- Активный сеанс или наличие доступа к учетной записи с правами локального администратора на удаленных системах;
- Среда Active Directory;
- Модуль Active Directory PowerShell на вашем клиенте; а также
- Сервер служб обновления Windows Server (WSUS), установленный и настроенный для управления вашими системами.
Настройте тестовую среду
Как известно большинству администраторов, патчи не стоит устанавливать непосредственно в свои производственные системы, а это значит, что вам нужно настроить тестовую среду. И настроить ее необходимо с помощью выборки операционных систем и конфигураций всех систем, которые получают исправления.
Чтобы определить, что есть в вашем арсенале, используйте следующий скрипт. Он запрашивает все компьютеры Active Directory в домене и группирует их по операционной системе.
$computerCount = 2
$properties = @(
@{Name='OperatingSystem';Expression={$_.Name}},
@{Name='TotalCount';Expression={$_.Group.Count}},
@{Name='TestComputers';Expression={$_.Group | Select-Object -ExpandProperty Name -First $computerCount }}
)
$testGroups = Get-ADComputer -Filter * -Properties OperatingSystem | Group-Object -Property OperatingSystem | Select-Object -Property $properties $testGroups
Когда скрипт выполняется, он группирует вывод по типу машин и их количеству.
OperatingSystem TotalCount TestComputers
--------------- ---------- -------------
Windows Server 2016 Datacenter 3 {SRDC01, SCRIPTRUNNER01}
Теперь, когда вы знаете, какие у вас есть операционные системы, вы можете либо преобразовать физические машины в виртуальные, либо создать новые виртуальные машины в своем гипервизоре. Вы можете сделать это с помощью PowerShell, но это уже выходит за рамки данной статьи.
Развертывание обновлений Windows
После настройки тестовых виртуальных машин проверьте наличие новых исправлений. Чтобы найти эту информацию, потребуется использовать сервер WSUS.
Когда вы обнаружили идентификаторы базы знаний (KB) всех исправлений для тестирования, вы можете развернуть эти исправления с помощью модуля PSWindowsUpdate. Чтобы загрузить и установить, используйте эту команду:
Install-Module PSWindowsUpdate
Затем разверните исправления, но сначала вам нужно убедиться, что у вас включены соответствующие исключения портов брандмауэра для брандмауэра Windows. Вот быстрая команда PowerShell, чтобы включить ее в удаленных системах:
New-NetFirewallRule -DisplayName "Allow PSWindowsUpdate" -Direction Inbound -Program "%SystemRoot%\System32\dllhost.exe" -RemoteAddress Any -Action Allow -LocalPort 'RPC' -Protocol TCP
Затем вы можете запустить быстрый тест, выполнив простую команду, такую как Get-WUHistory, чтобы увидеть, возвращает ли она ошибку или возвращает историю исправлений. Если последнее, то можете продолжить.
Теперь пришло время развернуть исправления Windows для тестовых групп. В рамках описываемого случая потребуется развернуть KB ID KB4091664. Начните с копирования модуля PSWindowsUpdate на удаленные компьютеры, а затем начните установку. Кроме того, запланируйте перезагрузку во время периода обслуживания. В данном случае требуемое время наступит через два часа.
foreach ($computer in $testGroups.TestComputers) {
Copy-Item -Path "$Env:PROGRAMFILES\WindowsPowerShell\Modules\PSWindowsUpdate" -Destination "\\$computer\c$\Program Files\WindowsPowerShell\Modules" -Recurse
Install-WindowsUpdate -ComputerName $computer -KBArticleIds 'KB4091664' -Schedule (Get-Date).AddHours(2)
}
X ComputerName Result KB Size Title
- ------------ ------ -- ---- -----
1 scriptrun... Accepted KB4091664 1MB 2018-09 Update for Windows Server 2016 for x64-based Systems (KB4091664)
Этот скрипт запускает установку патча на каждом компьютере. Для отслеживания прогресса вы можете использовать команду Get-WUHistory.
Get-WUHistory -ComputerName scriptrunner01 -Last 1
ComputerName Operationname Result Date Title
------------ ------------- ------ ---- -----
scriptrun... Installation InProgress 4/4/2019 9:31:21 PM 2018-09 Update for Windows Server 2016 for x64-based Systems (KB4091664)