In today’s post, we will discuss a Three Ways To Determine VM Hardware Version on VMware vSphere. The VM hardware version (virtual machine hardware version) basically means the virtual hardware functions supported by a virtual machine (VM), which coreleates to the hardware on the ESXi host.
In each new ESXi release, VMware updates the VM version and, consequently, the parameters of virtual hardware. As a rule, in the new VM version new features appear, old bugs are fixed, etc. So when moving to a newer ESXi version it is recommended to upgrade virtual hardware version for all virtual machines. It’s better to use older VM versions only for compatibility purposes. In this article, we’ll consider how to upgrade virtual hardware version of a VM running on a VMWare ESXi host.
The compatibility of ESXi and VM versions is shown in the table below.
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 |
You can see the current virtual machine (virtual hardware) version in the Summary tab of the virtual machine. The screenshot below shows that VM version 8 (ESXI 5.0 and later) is being used.
Before upgrading the VM version, it is recommended to:
- Create a VM snapshot
- Update VMware Tools version
To upgrade the Virtual Hardware version, the virtual machine has to be stopped. After that right-click the VM to access Upgrade Virtual Hardware (Compatibility > Upgrade VM Compatibility in vSphere Web Client).
When upgrading the virtual hardware version to 10 or 11 from earlier versions, you will be able to edit VM settings only in vSphere Web Client interface. If you try to change them in vSphere Client, the following error appears:
Restricted Virtual Machine Settings
You have restricted editing capabilities on a virtual machine of version 9 or higher using this client.
Some devices may not appear in the devices list, and the settings of some devices may appear as “Restricted”.
If you want to edit the advanced hardware features of this virtual machine, please use the vSphere Web Client
You have restricted editing capabilities on a virtual machine of version 9 or higher using this client.
Some devices may not appear in the devices list, and the settings of some devices may appear as “Restricted”.
If you want to edit the advanced hardware features of this virtual machine, please use the vSphere Web Client
You can schedule an automatic upgrade of VM version after the next correct VM restart.
- To do it, go to VM settings, switch to the Virtual Hardware tab and expand Upgrade.
- Check Schedule VM Compatibility Upgrade option and select the upgrade version.
- It’s better to check Only upgrade after normal guest OS shutdown option.
Also, you can upgrade VM Hardware Version using PowerCLI:
Connect-VIServer esxi_hostname
Set-VM -VM lon-fs03 -Version v11 -Confirm:$false
If you are using a free ESXi version (VMware vSphere Hypervisor), you won’t be able to upgrade it in PowerCLI due to some API restrictions. But you can use vim-cmd command in ESXi shell:
Get the list of VMs on the server:
vim-cmd vmsvc/getallvms
Remember VMID to be upgraded:
vim-cmd vmsvc/upgrade vmid vmx-11
Start VM and make sure that it has been upgraded to VM version 11.
Windows Server Licensing for Virtual Environments
May 13, 2019Invalid State of a Virtual Machine on VMWare...
March 13, 2019ESXi: Slow Disk Performance on HPE Gen8
February 15, 2019How to Install Hyper-V Role in Windows 10...
August 8, 2018VMware vSAN 6.5: FAQ and Cluster Configuration
July 25, 2018Syntax
Description
The Update-VMVersion cmdlet updates virtual machines to the current version.
Examples
Example 1: Update a virtual machine
This command updates the virtual machine named VM06 to the most recent virtual machine version.
Required Parameters
-Name
Specifies an array of names of the virtual machines that this cmdlet updates.
Type: | String[] |
Aliases: | VMName |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True (ByValue) |
Accept wildcard characters: | False |
Specifies an array of virtual machines that this cmdlet updates.To obtain a VirtualMachine object, use the Get-VM cmdlet.
Type: | VirtualMachine[] |
Position: | 0 |
Default value: | None |
Accept pipeline input: | True (ByValue) |
Accept wildcard characters: | False |
Optional Parameters
![Get-vm Update Vm Hardware Get-vm Update Vm Hardware](http://www.running-system.com/wp-content/uploads/2018/01/schedule-compatibility-upgrade.jpg)
Runs the cmdlet as a background job.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Runs the cmdlet in a remote session or on a remote computer.Enter a computer name or a session object, such as the output of a New-CimSession or Get-CimSession cmdlet.The default is the current session on the local computer.
Type: | CimSession[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
![Schedule Schedule](/uploads/1/2/5/0/125087972/556078055.png)
Specifies one or more Hyper-V hosts that run this cmdlet.NetBIOS names, IP addresses, and fully qualified domain names are allowable.The default is the local computer.Use localhost or a dot (.) to specify the local computer explicitly.
Type: | String[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Prompts you for confirmation before running the cmdlet.
Type: | SwitchParameter |
Aliases: | cf |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Specifies one or more user accounts that have permission to perform this action.The default is the current user.
Type: | PSCredential[] |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Forces the command to run without asking for user confirmation.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Indicates that this cmdlet returns the Microsoft.HyperV.VirtualMachine object that it modifies.
Type: | SwitchParameter |
Position: | Named |
Default value: | None |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Shows what would happen if the cmdlet runs.The cmdlet is not run.
Type: | SwitchParameter |
Aliases: | wi |
Position: | Named |
Default value: | False |
Accept pipeline input: | False |
Accept wildcard characters: | False |
Outputs
Microsoft.HyperV.PowerShell.VirtualMachine
This cmdlet returns a VirtualMachine object, if you specify the Passthru parameter.