Computer >> 컴퓨터 >  >> 시스템 >> Windows Server

PowerShell과 PowerCLI로 VMware Windows VM 템플릿 자동 업데이트하기

VMware에서 새로운 가상 머신을 배포할 때는 일반적으로 VM 템플릿을 사용합니다. VMware VM 템플릿이란 사전에 구성된 설정, 설치된 소프트웨어, 보안 업데이트를 포함한 기준(reference) 가상 머신 복사본을 말합니다. 관리자는 템플릿을 최신 상태로 유지하기 위해 정기적인 업데이트 작업을 수행해야 합니다. 대표적인 작업은 다음과 같습니다.

  • Windows 보안 업데이트 설치 (최소 월 1회)
  • 시스템 및 응용 프로그램 업데이트
  • 백신 바이러스 정의 갱신 등

VMware VM 템플릿 업데이트 프로세스

일반적으로 VMware에서 VM 템플릿을 업데이트하는 과정은 다음 3단계로 진행됩니다.

  1. 콘텐츠 라이브러리(Content Library)의 템플릿을 가상 머신(VM)으로 변환합니다.
  2. VM을 시작한 뒤 관리자가 로그온하여 WSUS를 통해 승인된 Windows 업데이트를 설치하고, 필요한 소프트웨어를 갱신합니다.
  3. 업데이트 설치가 완료되면 VM을 재시작한 후 종료하고, 다시 템플릿으로 변환합니다.

이 글에서는 이러한 작업을 수동으로 진행하지 않고, Windows 업데이트를 VM 템플릿에 자동으로 적용하는 방법을 소개합니다.

시작하기 전에 알아둘 점

VMware 가상 머신에는 단독 Windows 이미지나 배포 이미지에 업데이트를 통합하는 방식을 그대로 적용할 수 없습니다. 대신 PowerCLI를 사용하면 Windows 가상 머신에 업데이트를 설치할 수 있습니다.

이 방법을 사용하려면 VM 템플릿에 다음 요소가 준비되어 있어야 합니다.

  • VMware Tools 설치
  • PowerShell 4.0 이상
  • PSWindowsUpdate 모듈
  • 게스트 OS의 스크립트 실행 정책(Execution Policy)에서 PowerShell 스크립트 실행 허용

PowerCLI 자동 업데이트 스크립트

아래 PowerCLI 스크립트는 VMware 템플릿을 자동으로 VM으로 변환한 뒤, WSUS에서 보안 업데이트를 설치하고 다시 템플릿으로 되돌리는 전 과정을 처리합니다.

# PowerCLI 모듈 가져오기
Import-Module VMware.VimAutomation.Core -ErrorAction SilentlyContinue
# vCenter에 연결
Connect-VIServer de-vcenter1
$TemplateVMName = "Win2016StdTemplate"
# 템플릿을 VM으로 변환
Set-Template -Template $TemplateVMName -ToVM -Confirm:$false -RunAsync
# 60초 대기
Start-Sleep -s 60
# 가상 머신 시작
Start-VM -VM $TemplateVMName | Get-VMQuestion | Set-VMQuestion -DefaultOption -Confirm:$false
Start-Sleep -s 120
# 암호화된 파일에서 관리자 자격 증명 가져오기 (스크립트에 비밀번호를 평문으로 두지 않기 위함)
$adminname = "administrator"
$Pwd = Get-Content c:\Scripts\VMWare\vm_admin_passfile.txt | ConvertTo-SecureString
$Cred = New-Object -TypeName System.Management.Automation.PSCredential -ArgumentList $adminname, $Pwd
# VMware Tools를 통해 게스트 OS에서 사용 가능한 모든 업데이트 설치 (설치 로그: C:\temp\Update.log)

이 시나리오에서는 VM이 DHCP 서버로부터 IP 주소를 받을 수 있는 가상 네트워크에 있다고 가정합니다. 또한 VM의 WSUS 설정은 GPO가 아닌 레지스트리에 직접 저장되어 있어야 합니다.

Invoke-VMScript -ScriptType PowerShell -ScriptText "Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot" -VM $TemplateVMName -GuestCredential $Cred | Out-File -FilePath C:\temp\Update.log -Append
Start-Sleep -s 1800
# VMTools 버전 업데이트
Update-Tools -VM $TemplateVMName -NoReboot
# WinSxS 구성 요소 저장소 정리 및 DISM으로 이미지 최적화
Invoke-VMScript -ScriptType PowerShell -ScriptText "Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase" -VM $TemplateVMName -GuestCredential $Cred
Start-Sleep -s 1800
# VM 강제 재시작
Restart-VMGuest -VM $TemplateVMName -Confirm:$false
# VM 종료 후 다시 템플릿으로 변환
Shutdown-VMGuest -VM $TemplateVMName -Confirm:$false -RunAsync
Start-Sleep -s 180
Set-VM -VM $TemplateVMName -ToTemplate -Confirm:$false

작업 스케줄러로 월간 자동화

이 PowerShell 스크립트를 작업 스케줄러(Task Scheduler)에 등록하면, 매달 Microsoft Patch Tuesday(보안 패치 화요일) 며칠 뒤에 템플릿 업데이트가 자동으로 실행되도록 설정할 수 있습니다. 이렇게 해두면 VMware 템플릿에서 새 가상 머신을 배포할 때마다 최신 Microsoft 보안 업데이트가 적용된 상태임을 확신할 수 있습니다.