How to Configure Hyper-V Generation 1 BIOS Settings and Startup Order in Windows 11 Using PowerShell

While modern Windows 11 Hyper-V environments prioritize Generation 2 virtual machines utilizing Unified Extensible Firmware Interface (UEFI) specifications, system administrators frequently maintain Generation 1 virtual machines. Generation 1 VMs are essential for hosting legacy guest operating systems (such as 32-bit Windows, legacy BSD, and older Linux kernel builds) that lack UEFI support or require synthetic IDE controllers and legacy emulated network adapters for automated PXE deployments. Unlike Generation 2 machines, which use Set-VMFirmware, Generation 1 machines emulate traditional PC BIOS hardware.

Hyper-V manages this legacy subsystem through the Set-VMBios cmdlet in PowerShell. With Set-VMBios, administrators can configure startup device priority ordering, specify secondary boot devices, toggle hardware NumLock status, and enforce deterministic boot flows during automated disaster recovery and deployment testing.

Understanding Hyper-V Generation 1 BIOS Architecture

The Hyper-V Generation 1 BIOS architecture emulates standard Intel 440BX chipset firmware. Key hardware characteristics governed by the BIOS include:

  • Startup Device Order (Boot Order): Determines the priority sequence Hyper-V follows when searching for bootable media. Valid devices in Generation 1 include Floppy, CD (virtual DVD/ISO drives attached to IDE controllers), IDE (virtual hard disks attached to IDE Controller 0 or 1), and LegacyNetworkAdapter (synthetic emulated NIC for PXE network booting).
  • NumLock Initialization: Dictates whether the virtual keyboard controller initializes with the numeric keypad active upon virtual machine boot.
  • IDE Controller Constraint: Generation 1 virtual machines can only boot from virtual hard disks attached to primary or secondary IDE controllers. While SCSI controllers can be attached for high-performance secondary data disks, the BIOS cannot load bootloader code from SCSI buses.

Prerequisites and Verifying VM Generation

Executing BIOS configuration cmdlets requires local administrative privileges and the Hyper-V PowerShell module installed on Windows 11.

Open an elevated PowerShell console and verify module presence:

# Check Hyper-V module availability
Get-Module -ListAvailable -Name Hyper-V

# Query target virtual machine to confirm Generation 1 architecture
Get-VM -Name "LegacyApp-VM" | Select-Object Name, State, Generation

Confirm that Generation returns 1. Attempting to execute Set-VMBios against a Generation 2 machine will return a terminating error indicating that the cmdlet is incompatible with UEFI firmware.

Inspecting Current BIOS Startup Settings

Before modifying boot priorities, query the active BIOS configuration of the virtual machine:

# Retrieve current BIOS parameters
Get-VMBios -VMName "LegacyApp-VM" | Format-List -Property VMName, StartupOrder, EnableNumLock

By default, newly provisioned Generation 1 virtual machines configure StartupOrder as {CD, IDE, LegacyNetworkAdapter, Floppy} with EnableNumLock set to False.

Configuring Startup Device Priority Ordering

To optimize boot speeds for production virtual machines, eliminate unnecessary device probes by placing the primary virtual hard disk (IDE) first in the sequence:

# Set primary boot priority to IDE hard disk, followed by optical CD drive
Set-VMBios -VMName "LegacyApp-VM" -StartupOrder @("IDE", "CD", "LegacyNetworkAdapter", "Floppy")

When provisioning machines via automated network deployment servers (such as Windows Deployment Services or Linux Cobbler/PXE), place the legacy network adapter at the top of the boot order:

# Prioritize PXE network boot for automated OS imaging
Set-VMBios -VMName "LegacyApp-VM" -StartupOrder @("LegacyNetworkAdapter", "IDE", "CD")

Ensure that the virtual machine possesses an emulated Legacy Network Adapter attached to a valid virtual switch, as standard Hyper-V virtual network adapters cannot execute PXE code under Generation 1 BIOS emulation.

Managing Startup NumLock Status

When managing legacy database servers or accounting applications requiring extensive numeric keypad input in console sessions, configure the BIOS to initialize with NumLock enabled automatically:

# Enable keyboard NumLock on virtual machine startup
Set-VMBios -VMName "LegacyApp-VM" -EnableNumLock $True

This setting takes effect immediately upon the next virtual machine power cycle.

Bulk Configuration Across Generation 1 VM Inventory

In enterprise staging environments hosting dozens of legacy testing VMs, standardize BIOS settings across all Generation 1 instances using pipeline filtering:

# Standardize BIOS boot order and NumLock across all Generation 1 virtual machines
Get-VM | Where-Object { $_.Generation -eq 1 } | ForEach-Object {
    Set-VMBios -VMName $_.Name `
               -StartupOrder @("IDE", "CD") `
               -EnableNumLock $True
}

Verifying and Testing Boot Execution

Confirm that the updated startup order has committed cleanly to the Hyper-V configuration store:

# Validate updated BIOS settings
Get-VMBios -VMName "LegacyApp-VM" | Format-Table VMName, StartupOrder, EnableNumLock

Power on the virtual machine and connect using VMConnect to verify that the virtual machine boots directly from the primary IDE container without pausing at network PXE timeouts or optical media prompts:

# Start the virtual machine and verify runtime state
Start-VM -Name "LegacyApp-VM"
Get-VM -Name "LegacyApp-VM" | Select-Object Name, State, Heartbeat

By leveraging Set-VMBios in PowerShell, system administrators maintain precise governance over legacy virtual infrastructure, ensuring deterministic boot cycles and dependable operations across Windows 11 Hyper-V.

Get the best tech tips delivered straight to your inbox.

Join thousands of readers mastering Apple, Google, Microsoft, and Linux.