ในแต่ละ ESXi Release ใหม่ VMware จะอัปเดต Version ของ VM และ Virtual Hardware ใน VMware VM Version ใหม่จะมี Functionality ใหม่ Virtual Devices ใหม่ เพิ่ม Resource Limits (PCI Slots, RAM, vCPU) แก้ Bugs ฯลฯ ดังนั้นเวลา Migrate ไป ESXi Version ใหม่ ควร Upgrade Virtual Hardware Version บน VMs ทั้งหมด ควรใช้ Older VM Versions เฉพาะเพื่อ Compatibility เท่านั้น บทความนี้จะแนะนำวิธี Upgrade Virtual Hardware Version ของ VM ที่รันบน VMware ESXi Host
ความเข้ากันได้ของ ESXi และ VM Hardware Versions แสดงในตาราง:
| Hypervisor Version | VM Version |
|---|---|
| ESX/ESXi 4.X | 7 |
| ESXi 5.0 | 8 |
| ESXi 5.1 | 9 |
| ESXi 5.5 | 10 |
| ESXi 6.0 | 11 |
| ESXi 6.5 | 13 |
| ESXi 6.7 | 14 |
| ESXi 6.7 U2 | 15 |
| ESXi 7.0 (7.0.0) | 17 |
| ESXi 7.0 U1 (7.0.1) | 18 |
| ESXi 7.0 U2 (7.0.2) | 19 |
ตรวจสอบ VM (Virtual Hardware) Version ปัจจุบันที่ Tab Summary ของ VM ในส่วน Compatibility Screenshot ด้านล่างแสดงว่าใช้ VM Version 18 (ESXI 7.0 U1 and later)

VMware ไม่แนะนำ ให้ Update Virtual Hardware Version เว้นแต่ต้องการ Features ใหม่จาก HW Version ใหม่
จะไม่สามารถ Run VM บน ESXi Host ที่ไม่รองรับ VM Hardware Version ใหม่ได้ เวลาพยายาม Migrate VM ไป Host ที่ ESXi Version เก่า ด้วย vMotion จะเกิด Error:
The virtual machine version is not compatible with the version of the host munexi1.

ก่อน Upgrade VM Version แนะนำให้:
- สร้าง VM Snapshot
- Update VMware Tools หาก Upgrade VM Hardware ก่อนติดตั้ง VMware Tools ล่าสุด Network Settings อาจ Reset ใน Windows Guest VM
เพื่อ Upgrade Virtual Hardware Version VM ต้อง Stopped แล้ว Right-click VM เลือก Compatibility → Upgrade VM Compatibility

ยืนยันการ Update Virtual Hardware และเลือก VM Hardware Version ในตัวอย่างเลือก ESXi 7.0 U1 and later ล่าสุดที่ Host มี

สามารถ Schedule Automatic Upgrade ของ VM Hardware Version ครั้งต่อไปที่ VM Restart Gracefully:
- เลือก Compatibility → Schedule VM Compatibility Upgrade ใน VM Context Menu
- จาก Drop-down Compatible with เลือก VM Hardware Version ที่ต้องการ Upgrade
- Enable Option Only upgrade after normal guest OS shutdown;

- VM Hardware Version จะ Update ตอน VM Reboot ถัดไป
ยังสามารถ Update VM Hardware Version ด้วย PowerShell Cmdlets จาก VMware PowerCLI Module เชื่อมต่อ vCenter หรือ ESXi Host:
Connect-VIServer esxi_hostname
List Virtual Hardware Versions ของ VMs:
Get-VM | select Name, hardwareversion, PowerState

ใน VMware ESXi เวอร์ชันใหม่ ต้องใช้ HardwareVersion แทน Attribute Version ของ VM จะมี Warning เวลาใช้ Attribute Name เก่า:
WARNING: The 'Version' property of VirtualMachine type is deprecated. Use the 'HardwareVersion' property instead.
เพื่อ Update VM Hardware Version ด้วย PowerShell รัน:
Set-VM -VM lon-fs03 -HardwareVersion vmx-19 -Confirm:$false
หาก VM Hardware Version ที่ระบุไม่รองรับโดย ESXi Host จะเกิด Error:
The operation for the entity mytestVM1 failed with the following message: The operation is not supported on the object.
List VMs ที่ต้อง Upgrade ด้วย Out-GridView Cmdlet:
Get-VM |Where-object {$_.powerstate -eq "poweredoff"} | Out-GridView -PassThru | Set-VM -HardwareVersion vmx-19 -Confirm:$false
จะเห็น Graphic Table ต้อง Select VMs ที่ต้องการ Upgrade (ใช้ CTRL Key เลือกหลาย VMs)

สามารถ Schedule Automatic Hardware Upgrades บน VMs ทั้งหมดบน Host ด้วย PowerShell Script เรียบง่าย:
$AllVMs = Get-VM
Foreach ($VM in ($AllVMs)) {
$VMConfig = Get-View -VIObject $VM.Name
$vmConfigSpec = New-Object VMware.Vim.VirtualMachineConfigSpec
$vmConfigSpec.ScheduledHardwareUpgradeInfo = New-Object -TypeName VMware.Vim.ScheduledHardwareUpgradeInfo
$vmConfigSpec.ScheduledHardwareUpgradeInfo.UpgradePolicy = "always"
$vmConfigSpec.ScheduledHardwareUpgradeInfo.VersionKey = "vmx-19"
$VMConfig.ReconfigVM($vmConfigSpec)
}
VMs ทั้งหมดจะ Auto Upgrade ไป VM Hardware Version ที่ระบุ ตอน Reboot ถัดไป
สำหรับ Centralized Upgrading ของ VM Hardware และ VM Tools ใน Corporate Networks ดีกว่าใช้ vCenter Update Manager หรือ vSphere Lifecycle Manager (VLCM) ใน vSphere 7+
หากใช้ Free ESXi Version (VMware vSphere Hypervisor) จะ ไม่สามารถ Upgrade VM Hardware Version ผ่าน PowerCLI ได้ เนื่องจาก API Restrictions แต่สามารถใช้คำสั่ง vim-cmd ใน ESXi Shell:
Get List of VMs on Server:
vim-cmd vmsvc/getallvms
หา VMID ของ VM ที่ต้องการ Upgrade และระบุในคำสั่ง:
vim-cmd vmsvc/upgrade vmid vmx-17

Start VM และตรวจสอบว่า Upgrade เป็น VM Version 17 แล้ว
ยังมีอีกวิธี Unsupported คือแก้ไข VM Config File (VMX) โดยตรง
SSH เข้า ESXi Host ไป Directory ของ VM:
cd /vmfs/volumes/datastore_name/test_vm
Edit test_vm.vmx File:
vi myvm.vmx
หาบรรทัด Config:
virtualHW.version = "12"
เปลี่ยนเป็น:
virtualHW.version = "17"
Save และ Close VMX File (Esc, :, w, q)