В среде VMWare для развертывания новых виртуальных машин в большинстве случае используются шаблоны ВМ (VM templates). Шаблон ВМ VMWare это эталонная копия виртуальной машины с заданными настройками, установленным софтом, обновлениями безопасности. Администратору нужно периодически обновлять шаблон ВМ для поддержания его в актуальном состоянии: устанавливать новые обновления безопасности Windows (как минимум раз в месяц), обновлять системное и прикладное ПО и т.д.
Процесс обновления шаблона виртуальной машины выглядит следующим образом:
- Шаблон из Content Library конвертируется в виртуальную машину;
- После включение ВМ, администратор логинится, выполняет установку одобренных обновлений Windows со WSUS, обновляет необходимое ПО;
- После установки обновлений, ВМ нужно перезагрузить, выключить и сконвертировать обратно в шаблон.
В этой статье мы покажем, как автоматически установить обновления Windows в шаблон виртуальной машины VMWare без необходимости выполнять ручные действия.
Для установки обновлений в виртуальную машину можно использовать PowerCLI. Предполагается, что в шаблоне ВМ установлены VMWare Tools, версия PowerShell не ниже 4 и модуль PSWindowsUpdate, а в гостевой ОС разрешен запуск PowerShell скриптов.
Следующий PowerCLI скрипт позволит вам автоматически сконвертировать шаблон в ВМ и установить обновления безопасности с WSUS:
# Загрузка модуля PowerCLI
Import-Module VMware.VimAutomation.Core -ErrorAction SilentlyContinue
# Подключение к vCenter
connect-viserver vcenter1
$TeplateVMName="W2K16Template"
# Конвертация шаблона в ВМ
Set-Template -Template $TeplateVMName -ToVM -Confirm:$false –RunAsync
# Задержка 60 сек
Start-sleep -s 60
# Включить виртуальную машину
Start-VM -VM $TeplateVMName | Get-VMQuestion | Set-VMQuestion -DefaultOption -Confirm:$false
Start-sleep -s 120
# Загрузка пароля администратора из зашифрованного файла (если вы не хотите хранить пароль в скрипте в открытом виде)
$adminname = "administrator"
$Pwd = Get-Content c:\ps\passfile.txt | ConvertTo-SecureString $
cred = new-object -typename System.Management.Automation.PSCredential -argumentlist $adminname, $Pwd
# Запуск команды установки всех доступных обновлений в гостевой ОС через VMWare Tools (лог установки обновлений сохраняется в файл C:\Update.log
Invoke-VMScript -ScriptType PowerShell -ScriptText "Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot" -VM $TeplateVMName -GuestCredential $Cred | Out-file -Filepath C:\Update.log -Append
Start-sleep -s 1800
# Обновление версии VMTools
Update-Tools -VM $$TeplateVMName -NoReboot
# Очистка хранилища компонентов WinSxS и оптимизация образа с помощью dism
Invoke-VMScript -ScriptType PowerShell -ScriptText " Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase" -VM $TeplateVMName -GuestCredential $Cred
Start-sleep -s 1800
# Принудительный перезапуск ВМ
Restart-VMGuest -VM $TeplateVMName -Confirm:$false
# Выключение ВМ и преобразование ее обратно в шаблон
Shutdown-VMGuest –VM $TeplateVMName -Confirm:$false –RunAsync
Start-sleep -s 180
Set-VM –VM $TeplateVMName -ToTemplate -Confirm:$false
Вы можете добавить этот PowerShell скрипт в планировщик, чтобы автоматически устанавливать обновления в шаблон раз месяц через несколько дней после Patch Tuesdays. Теперь при развертывании новой виртуальной машины из образа в VMWare вы можете гарантировать, что в ней установлены последние обновления безопасности Microsoft.