ในการปรับใช้ Virtual Machines ใหม่ใน VMWare มักใช้ VM Templates VMWare VM template คือสำเนา Virtual Machine อ้างอิงที่มีการตั้งค่าที่กำหนดค่า ซอฟต์แวร์ที่ติดตั้ง และอัปเดตความปลอดภัย ผู้ดูแลระบบต้องอัปเดต VM Template เป็นประจำเพื่อให้ทันสมัย: ติดตั้งอัปเดตความปลอดภัย Windows ใหม่ (อย่างน้อยเดือนละครั้ง) อัปเดตแอปพลิเคชันระบบและแอปพลิเคชัน อัปเดตนิยามแอนตี้ไวรัส ฯลฯ
กระบวนการอัปเดต VM Template บน VMWare
- Template จาก Content Library ถูกแปลงเป็น Virtual Machine
- หลังเริ่มต้นแล้ว ผู้ดูแลล็อกอิน ติดตั้ง Windows updates ที่อนุมัติผ่าน WSUS อัปเดตซอฟต์แวร์ที่จำเป็น
- หลังติดตั้งอัปเดตแล้ว VM จะถูกรีสตาร์ท แล้วปิด และแปลงกลับเป็น Template
ในบทความนี้เราจะแสดงวิธีติดตั้ง Windows updates ให้กับ VMWare virtual machine template แบบอัตโนมัติโดยไม่ต้องทำอะไรด้วยมือ
สามารถใช้ PowerCLI เพื่อติดตั้งอัปเดตให้กับ Windows virtual machine เราสมมติว่า VMWare tools, PowerShell version 4 (หรือใหม่กว่า) และโมดูล PSWindowsUpdate ถูกติดตั้งใน VM template แล้ว การรันสคริปต์ PowerShell ต้องได้รับอนุญาตใน Guest OS โดย Script Execution Policy
สคริปต์ PowerCLI ด้านล่างจะช่วยให้คุณแปลง VMWare template เป็น VM และติดตั้งอัปเดตความปลอดภัยจาก WSUS แบบอัตโนมัติ:
# Import the PowerCLI module
Import-Module VMware.VimAutomation.Core -ErrorAction SilentlyContinue
# Connect to vCenter
connect-viserver de-vcenter1
$TeplateVMName="Win2016StdTemplate"
# Convert a template to a VM
Set-Template -Template $TeplateVMName -ToVM -Confirm:$false –RunAsync
# Make a 60 seconds delay
Start-sleep -s 60
# Start the virtual machine
Start-VM -VM $TeplateVMName | Get-VMQuestion | Set-VMQuestion -DefaultOption -Confirm:$false
Start-sleep -s 120
# Get administrator credentials from an encrypted file (if you don't want to keep password in clear text in PS script)
$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
# Run the command to install all available updates in the guest OS using VMWare Tools (the update installation log is saved to a file: C:\temp\Update.log)
Invoke-VMScript -ScriptType PowerShell -ScriptText "Install-WindowsUpdate -MicrosoftUpdate -AcceptAll -AutoReboot" -VM $TeplateVMName -GuestCredential $Cred | Out-file -Filepath C:\temp\Update.log -Append
Start-sleep -s 1800
# Update VMTools version
Update-Tools -VM $TeplateVMName -NoReboot
# Clean up the WinSxS component store and optimize the image with DISM
Invoke-VMScript -ScriptType PowerShell -ScriptText "Dism.exe /Online /Cleanup-Image /StartComponentCleanup /ResetBase" -VM $TeplateVMName -GuestCredential $Cred
Start-sleep -s 1800
# Force restart the VM
Restart-VMGuest -VM $TeplateVMName -Confirm:$false
# Shut the VM down and convert it back to the template
Shutdown-VMGuest –VM $TeplateVMName -Confirm:$false –RunAsync
Start-sleep -s 180
Set-VM –VM $TeplateVMName -ToTemplate -Confirm:$false
สมมติว่า VM อยู่ในเครือข่ายเสมือนที่สามารถรับที่อยู่ IP จากเซิร์ฟเวอร์ DHCP ได้ การตั้งค่า WSUS ใน Virtual Machine ถูกเก็บใน Registry แทนที่จะปรับใช้ผ่าน GPO
คุณสามารถเพิ่มสคริปต์ PowerShell นี้ลงใน Task Scheduler เพื่อติดตั้งอัปเดตให้กับ Template อัตโนมัติทุกเดือน หลังจาก Microsoft Patch Tuesday ไปไม่กี่วัน แล้วหากคุณปรับใช้ Virtual Machine ใหม่จาก VMWare Template คุณจะมั่นใจได้ว่าอัปเดตความปลอดภัยล่าสุดของ Microsoft ถูกติดตั้งอยู่ในมันแล้ว