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.

