The error message “The Virtual Machine Management Service failed to start the virtual machine” is one of the most common and frustrating issues Hyper-V administrators encounter. This error appears when you attempt to power on a virtual machine from Hyper-V Manager or PowerShell, and the VMMS service cannot initialize the VM for various underlying reasons. In this guide, you will learn how to diagnose the six most common causes of this failure and apply targeted PowerShell-based fixes for each one.
Prerequisites
- Windows Server 2016, 2019, 2022, or 2025 with the Hyper-V role installed
- Administrative access to the Hyper-V host
- PowerShell 5.1 or later
- Basic familiarity with Hyper-V Manager and VM configuration
- Access to Event Viewer for log analysis
Understanding the VMMS Start Failure
The Virtual Machine Management Service (VMMS) is the core Windows service responsible for managing all Hyper-V operations. When you click “Start” on a virtual machine, VMMS performs a series of pre-flight checks before handing control to the VM Worker Process (vmwp.exe). If any of these checks fail, VMMS reports the generic error:
An error occurred while attempting to start the selected virtual machine(s). ‘VMName’ failed to start. The Virtual Machine Management Service failed to start the virtual machine ‘VMName’.
The actual cause is buried in the sub-error that accompanies this message. Understanding which sub-error you are seeing is the key to a fast resolution. The VMMS start process validates memory availability, disk accessibility, firmware configuration, integration services compatibility, and the integrity of the VM configuration files in that order.
You can quickly retrieve the last error for a VM using PowerShell:
Get-VM -Name "VMName" | Select-Object Name, State, Status
For more detail, query the Hyper-V event logs:
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-Hyper-V-VMMS-Admin'
Level = 2
} -MaxEvents 10 | Format-List TimeCreated, Message
Common Causes and Solutions
1. Insufficient Memory or Memory Overcommit
The most frequent cause is simply not enough physical RAM available on the host. Hyper-V must reserve the configured startup RAM for a VM before it can start. If other running VMs consume most of the host memory, the new VM cannot obtain its allocation.
Diagnose the issue:
# Check total physical memory on the host
Get-CimInstance Win32_PhysicalMemory | Measure-Object -Property Capacity -Sum |
Select-Object @{N='TotalRAM_GB';E={[math]::Round($_.Sum/1GB,2)}}
# Check memory assigned to all VMs
Get-VM | Where-Object State -eq 'Running' |
Select-Object Name,
@{N='AssignedMB';E={$_.MemoryAssigned/1MB}},
@{N='StartupMB';E={$_.MemoryStartup/1MB}}
# Check available memory on the host
Get-Counter '\Memory\Available MBytes' |
Select-Object -ExpandProperty CounterSamples |
Select-Object CookedValue
Fix the issue:
Option A — Reduce the VM startup memory:
Set-VMMemory -VMName "VMName" -StartupBytes 2GB
Option B — Enable Dynamic Memory so the VM can start with less and grow as needed:
Set-VMMemory -VMName "VMName" -DynamicMemoryEnabled $true `
-MinimumBytes 512MB -StartupBytes 2GB -MaximumBytes 8GB
Option C — Shut down or save-state other VMs to free resources:
Stop-VM -Name "LowPriorityVM" -Save
2. VHD/VHDX Locked by Another Process or Backup
When a backup application (Windows Server Backup, Veeam, or another agent) is actively creating a snapshot of your VHD/VHDX files, or when the disk is mounted to another VM or even another Hyper-V host, the file remains locked. VMMS cannot acquire an exclusive write handle and the VM fails to start.
Diagnose the issue:
# Check which VMs use a specific VHD
Get-VM | Get-VMHardDiskDrive |
Where-Object Path -like "*diskname*" |
Select-Object VMName, Path
# Check if the VHD is mounted as a disk on the host
Get-VHD -Path "D:\VMs\VMName\disk.vhdx" |
Select-Object Path, Attached, @{N='SizeGB';E={[math]::Round($_.FileSize/1GB,2)}}
# List processes that may lock the file (requires handle.exe from Sysinternals)
# handle.exe "disk.vhdx"
Fix the issue:
If the disk is mounted on the host:
Dismount-VHD -Path "D:\VMs\VMName\disk.vhdx"
If a backup process holds the lock, wait for it to complete or stop the backup job. If another VM references the same VHD in error:
# Remove the disk from the other VM
Remove-VMHardDiskDrive -VMName "OtherVM" -ControllerType SCSI `
-ControllerNumber 0 -ControllerLocation 1
3. VM Configuration Version Incompatible
When you import a VM that was created on a newer Hyper-V host (for example, Windows Server 2025) into an older host (Windows Server 2019), the configuration version may be unsupported. Conversely, an older VM on a newer host might need an upgrade before certain features work correctly.
Diagnose the issue:
# Check VM configuration version
Get-VM | Select-Object Name, Version, State |
Sort-Object Version | Format-Table -AutoSize
# Check supported configuration versions on this host
Get-VMHostSupportedVersion |
Select-Object Version, IsDefault | Format-Table
Fix the issue:
To upgrade a VM to the current host version (this is a one-way operation):
# VM must be off
Stop-VM -Name "VMName" -Force
Update-VMVersion -VMName "VMName"
If you need to move the VM to an older host instead, you must export it on the newer host and re-create it on the older host with a compatible configuration version. There is no downgrade path for VM configuration versions.
4. Secure Boot Conflicts with Linux VMs
Generation 2 VMs have Secure Boot enabled by default using the “Microsoft Windows” certificate template. When you install a Linux distribution, the bootloader is signed with a different certificate. The VM will fail to start with a firmware error unless you change the Secure Boot template or disable Secure Boot entirely.
Diagnose the issue:
Get-VMFirmware -VMName "LinuxVM" |
Select-Object VMName, SecureBoot, SecureBootTemplate
Fix the issue:
Option A — Use the UEFI Certificate Authority template (recommended for most Linux distros):
Set-VMFirmware -VMName "LinuxVM" `
-SecureBootTemplate MicrosoftUEFICertificateAuthority
Option B — Disable Secure Boot entirely (less secure but works for all OS types):
Set-VMFirmware -VMName "LinuxVM" -EnableSecureBoot Off
5. Integration Services Issues
Outdated or mismatched Integration Services (IC) components can sometimes prevent a VM from starting, especially after a host upgrade. This is less common in modern Hyper-V versions where IC updates are delivered through Windows Update, but it still occurs with older VMs.
Diagnose the issue:
Get-VM | Select-Object Name, IntegrationServicesVersion, State |
Format-Table -AutoSize
# Check individual integration service status
Get-VMIntegrationService -VMName "VMName" |
Select-Object Name, Enabled, PrimaryStatusDescription
Fix the issue:
Disable problematic integration services that are preventing startup:
# Disable Guest Service Interface if causing issues
Disable-VMIntegrationService -VMName "VMName" -Name "Guest Service Interface"
# Or disable all non-essential services
Get-VMIntegrationService -VMName "VMName" |
Where-Object { $_.Name -ne "Heartbeat" -and $_.Name -ne "Shutdown" } |
Disable-VMIntegrationService
After the VM starts, update Integration Services from within the guest OS, then re-enable the services.
6. Corrupted VM Configuration
VM configuration files (.vmcx for Generation 2 or .xml for Generation 1) can become corrupted due to unexpected host shutdowns, storage failures, or interrupted live migrations. When the configuration is unreadable, VMMS cannot parse the VM settings at all.
Diagnose the issue:
# Check VM configuration file location
Get-VM -Name "VMName" | Select-Object Name, Path, ConfigurationLocation
# Verify the configuration files exist
Test-Path "C:\ProgramData\Microsoft\Windows\Hyper-V\Virtual Machines\<GUID>.vmcx"
# Check for VM errors in event log
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-Hyper-V-VMMS-Admin'
Level = 2
StartTime = (Get-Date).AddHours(-24)
} | Where-Object Message -like "*configuration*" |
Select-Object TimeCreated, Message
Fix the issue:
If you have a recent backup of the configuration, restore it. Otherwise, recreate the VM pointing to the existing disks:
# Remove the broken VM entry (keeps VHD files intact)
Remove-VM -Name "VMName" -Force
# Recreate with existing disks
New-VM -Name "VMName" -MemoryStartupBytes 4GB `
-VHDPath "D:\VMs\VMName\disk.vhdx" `
-Generation 2 -SwitchName "ExternalSwitch"
# Reconfigure settings as needed
Set-VMProcessor -VMName "VMName" -Count 4
Set-VMMemory -VMName "VMName" -DynamicMemoryEnabled $true `
-MinimumBytes 1GB -MaximumBytes 8GB
Error Sub-types and Solutions Comparison
| Sub-Error Message | Root Cause | Primary Fix | PowerShell Command |
|---|---|---|---|
| ”Not enough memory in the system” | Memory overcommit | Reduce RAM or enable Dynamic Memory | Set-VMMemory -DynamicMemoryEnabled $true |
| ”Failed to open attachment” | VHD/VHDX file locked | Dismount disk or wait for backup | Dismount-VHD -Path <path> |
| ”The configuration version is not supported” | Version mismatch | Upgrade VM version | Update-VMVersion -VMName <name> |
| ”The image’s hash and certificate are not allowed” | Secure Boot template mismatch | Change Secure Boot template | Set-VMFirmware -SecureBootTemplate |
| ”Synthetic SCSI Controller: Failed” | Integration Services conflict | Disable problematic IC | Disable-VMIntegrationService |
| ”Failed to restore the virtual machine state” | Corrupted configuration | Remove and recreate VM | Remove-VM then New-VM |
Real-World Scenario
You have a production Hyper-V host running Windows Server 2022 with 64 GB of RAM. The server hosts eight virtual machines, and a nightly backup runs at 2:00 AM using Veeam Backup. On Monday morning, you discover that two VMs that were rebooted over the weekend for patching failed to come back online. Both show “The Virtual Machine Management Service failed to start the virtual machine” in Hyper-V Manager.
Your investigation reveals two different problems. The first VM, a Linux-based web server, was upgraded to a new kernel during the maintenance window. After reboot, Secure Boot blocks the new bootloader because the VM was still using the “Microsoft Windows” Secure Boot template. You fix it with:
Set-VMFirmware -VMName "WebServer01" `
-SecureBootTemplate MicrosoftUEFICertificateAuthority
Start-VM -Name "WebServer01"
The second VM, a Windows application server, fails with a “not enough memory” sub-error. While the VM was down, a colleague started a large test VM consuming 16 GB of RAM. You check the total allocation:
Get-VM | Where-Object State -eq 'Running' |
Measure-Object -Property MemoryAssigned -Sum |
Select-Object @{N='TotalAssignedGB';E={[math]::Round($_.Sum/1GB,2)}}
The total is 58 GB, leaving only 6 GB free — not enough for the application server that needs 8 GB at startup. You enable Dynamic Memory on the application server with a 4 GB minimum:
Set-VMMemory -VMName "AppServer02" -DynamicMemoryEnabled $true `
-MinimumBytes 4GB -StartupBytes 4GB -MaximumBytes 8GB
Start-VM -Name "AppServer02"
Both VMs are now running. You schedule a capacity review to prevent future overcommit situations.
Gotchas and Edge Cases
Generation 2 VM quirks. Generation 2 VMs use UEFI firmware and have stricter boot requirements. A VM created as Generation 1 cannot be converted to Generation 2 without recreating it. If you see firmware-related errors, always check whether you are dealing with a Gen 1 or Gen 2 VM using Get-VM -Name "VMName" | Select-Object Generation.
Nested virtualization. If you run Hyper-V inside a Hyper-V VM (nested virtualization), the inner host requires that the outer VM explicitly exposes virtualization extensions. Without this, inner VMs will fail to start with a processor incompatibility error. Enable it with Set-VMProcessor -VMName "OuterVM" -ExposeVirtualizationExtensions $true.
Failover Cluster scenarios. In a clustered environment, a VM may fail to start because the Cluster Shared Volume (CSV) is owned by a different node or is in redirected access mode. Check CSV status with Get-ClusterSharedVolume | Select-Object Name, State, OwnerNode before troubleshooting VMMS errors.
Anti-virus file locks. Real-time antivirus scanning can briefly lock VHD/VHDX files during access, causing intermittent start failures. Configure exclusions for your VM storage paths: *.vhdx, *.vhd, *.vmcx, *.vmrs, and the entire Virtual Machines folder.
Saved state incompatibility. If a VM was saved-stated on a host with a different processor family and then moved, restoring from saved state will fail. Delete the saved state and cold-boot the VM: Remove-VMSavedState -VMName "VMName".
Troubleshooting
Use these diagnostic commands to systematically identify the root cause when the error message alone is not sufficient:
# Step 1: Get detailed VM status
Get-VM -Name "VMName" | Format-List *
# Step 2: Query Hyper-V operational event logs
Get-WinEvent -FilterHashtable @{
LogName = 'Microsoft-Windows-Hyper-V-Worker-Admin'
Level = 2,3
StartTime = (Get-Date).AddHours(-1)
} -MaxEvents 20 | Format-List TimeCreated, Id, Message
# Step 3: Check VMMS service health
Get-Service vmms | Select-Object Name, Status, StartType
# Step 4: Restart VMMS if the service is degraded (will affect all VMs briefly)
Restart-Service vmms -Force
# Step 5: Validate VM configuration integrity
Get-VM -Name "VMName" | Test-VHD
# Step 6: Check host resource availability
Get-VMHostNumaNode | Select-Object NodeId, MemoryAvailable, MemoryTotal
# Step 7: Verify virtual switch connectivity
Get-VMSwitch | Select-Object Name, SwitchType, NetAdapterInterfaceDescription
If the VMMS service itself fails to start, check the Windows System event log for service crash events. A corrupted VMMS WMI repository can be repaired by running winmgmt /salvagerepository from an elevated command prompt.
Summary
- The “VMMS failed to start the virtual machine” error is a generic wrapper around six common sub-errors, each with a distinct root cause and fix.
- Memory overcommit is the most frequent cause — always verify available RAM before starting VMs and use Dynamic Memory to optimize allocation.
- VHD/VHDX file locks from backups, other VMs, or mounted disks prevent VMMS from acquiring write access to the virtual disk.
- Configuration version mismatches occur when moving VMs between hosts running different Windows Server versions — use
Update-VMVersionon the newer host. - Secure Boot template conflicts break Linux VMs on Generation 2 — switch to the
MicrosoftUEFICertificateAuthoritytemplate. - Integration Services issues are rare in modern Hyper-V but can block startup on upgraded hosts — disable and re-enable problematic services.
- Corrupted VM configurations require removing and recreating the VM while preserving the VHD files.
- Always check the Hyper-V event logs (
Microsoft-Windows-Hyper-V-VMMS-AdminandHyper-V-Worker-Admin) for the actual sub-error before attempting fixes.
Related Articles
- Resolved: Hyper-V General Access Denied Error Trying to Load Virtual Hard Drive
- How to Configure Hyper-V Replica Using Certificate-Based Authentication (HTTPS)
- Configure Environment to Host Hyper-V Virtual Machines with Shared Storage SMB 3.0
- How to Remotely Manage a Hyper-V Server: Enable Firewall Exceptions