Since Windows Server 2012 R2, Microsoft introduced a new VM Type called Generation 2 VM. There are some advantages using Generation (Gen) 2 VM such as Hot add/remove Virtual Network Adapter, Live expand the VHDX, or Secure Boot.

However, still, there are some reasons why you still use Generation 1 over Generation 2. Below the different of Generation 1 and Generation 2 VMs:

Generation 1

  • Supports legacy drivers and BIOS based Architecture.
  • Use BIOS Firmware.
  • Provides 2 IDE controllers, IDE 0 and IDE 1 to attach up to two drives on each controller.
  • Connect up to four SCSI controllers and up to 64 attached drives.
  • Generation 1 Supports older versions of Microsoft Operating Systems, like Windows XP, Windows Server 2003 and above.
  • Supports both x86 and x64 Operating System.
  • Both Generation 1 and Generation 2 Virtual Machines Support PXE boot.
  • In generation 1 Virtual Machines, we need to add the Physical DVD drive on H

Generation 2

  • Can only be created in Windows Server 2012R2 or later Versions.
  • Uses UEFI Firmware as replacement of BIOS.
  • Supports Guest Operating System VMs. (Win 2012, Win2012R2, Win 8.0(64bit) and Win 8.1(64bit).
  • Provides Secure boot by default, and Secure Boot helps computer fight against the Virus infections and Malware attacks.
  • No IDE controllers on Generation 2 Virtual Machines.
  • Connect up to four SCSI controllers, attach 64 drives .
  • x86 Operating System not Supported on Generation 2 Virtual Machines.
  • Both Generation 1 and Generation 2 Virtual Machines Support PXE boot

Now, how we can check if the VM is Gen 1 or Gen 2?

Basicaly, you can check the Hyper-V Manager and see if the legacy device is in there or whether the VM is booting from a SCSI controller or IDE Controller. However, we can also use PowerShell Get-VM CmdLet to see the Generation type of all of your VMs. Below the example of the command:

PS C:\Install> Get-VM | ft Name, Generation
Name Generation
---- ----------
FW 1
2008R2 (1796486) 1
DC4 2
HV2 2
PFSENSE 1
DC1 2
DC2 2
FW 1
SCCM 2
SCVMM 2
SEADC1 2

Or if you want to get all VMs on your Hyper-V Cluster, you can use the command below:

PS C:\Install> Get-VM -ComputerName (Get-ClusterNode).Name | ft Name, Generation
Name Generation
---- ----------
FW 1
2008R2 (1796486) 1
DC4 2
HV2 2
PFSENSE 1
ROUTER 2
DC1 2
DC2 2
FW 1
SCCM 2
SCVMM 2
SEADC1 2
DC2 2
CLIENT 2
SFBBE 2
SQL03 2
SQL04 2

If you like this article, please share, subscribe or you can follow our Facebook Page and Twitter.