Table of Contents
Introduction
There are two different generations of virtual machines in Hyper-V: Generation 1 and Generation 2 virtual machines.
Generation 1 is a virtual machine that uses legacy BIOS, and a Generation 2 Hyper-V machine is a UEFI-based machine.
The Hyper-V virtual machine’s generation matters because PXE uses different boot files depending on if the machine boots are using Legacy BIOS or UEFI.
In most cases, I recommend that you create a Generation 2 virtual machine if you don’t have a specific reason not to. One reason could be that you have not yet enabled UEFI in your environment.
This blog post describes how to add a Legacy Adapter to generation 2 VM to enable PXE boot for devices not yet on UEFI.
If you want to learn more about Hyper-V, I recommend the courses at Pluralsight.
What is PXE boot?
PXE boot is a network boot where a small boot file is sent to a client at the initial boot-up. The PXE server typically uses WDS and DHCP to enable this communication. As an IT administrator, you can use a virtual PXE server or a physical PXE server.
Start PXE over IPv4 on a Hyper-V generation 1 machine
How do I verify the Hyper-V virtual machine generation?
If you want to verify if the Hyper-V VM is a Generation 1 or Generation 2 machine, select the VM in Hyper-V Manager and check the Generation version on the first page.

Why doesn’t legacy PXE work on generation 2 virtual machines?
A Hyper-V Generation 2 machine is like a running UEFI workstation.
The UEFI workstation could not communicate with legacy PXE, but only with UEFI boot images.
A machine configured with UEFI will use boot\x64\wdsmgfw.efi on the WDS server when starting the boot. A legacy boot will use boot\x64\wdsnbp.com.
The same issue with UEFI communication also applies to Hyper-V Generation 2 machines. This guide explains how to start PXE over IPv4 on Generation 1 Hyper-V VMs.
If your network is configured to deploy boot images using legacy methods, you must configure the virtual machine’s hardware.
How to configure a Generation 2 VM for legacy PXE boot
Step #1 – Create a virtual switch
First, you need to create a virtual switch. The virtual switch is required for the Virtual Machine to communicate with the network. If you have already created a virtual machine for your network, you can skip this step. Start by right-clicking the Hyper-V host in Hyper-V Manager and selecting Virtual Switch Manager.

Create a new Virtual Switch. Select External. External is similar to “Bridged” if you are using other virtualization platforms.

Give the new Virtual Switch a name. I named mine “Bridged.”

Step #2 – Add a legacy network adapter
By default, there is only a “Standard Network Adapter” installed on the Virtual Machine, but for PXE functionality, it requires you to add a Legacy Network Adapter.

Go to the Legacy Network Adapter that you just added and specify that it should use the Virtual Switch that you just created.

Step #3 – Configure startup order
6. Now, we need to make sure that the client boots first using the Legacy Network Adapter. Just select the Legacy Network Adapter and move it to the top of the list using the buttons.

Step #4 – Start the Hyper-V virtual machine
Start your Virtual Machine, and now PXE boot should work ๐
Conclusion
As I mentioned in the introduction, in most cases, I recommend creating a Generation 2 virtual machine in Hyper-V if there are no specific reasons not to do so.
For a thorough explanation about choosing a Generation 1 or Generation 2 VM, refer to Microsoft Docs.
Do you usually create Generation 1 or Generation 2 machines in your Hyper-V environment? Let me know in the comments below ๐
If you want to learn more about Hyper-V, I would highly recommend the courses at Pluralsight.
References
Further learning
- Microsoft Server Virtualization – Pluralsight
- How to create and configure a Hyper-V VM using Powershell
work like a charm! thanks!
Thank you for the Help!
It works fine ๐
Thanks. turns out a difference between the Legacy Network Adapter and Standard Network Adapter
Yes, there is. However, if you run a Generation 2 VM in 2012 R2, it has PXE support by default ๐
Thank you very much Daniel. That helped me a lot.
Thank you soooo much, spot on!
thanks a lot. it helped me a lot to get my pxe boot setup.
Thanks Daniel,
I was unsure where my PXE setup in Hyper-V was failing, so ended up setting up VM in VMWare first. When it worked, i knew the issue was with Hyper-V rather than the PXE config.
Thanks a lot
Thanks Daniel.
We don’t use “Enable unknown computer support” in our Config Manager setup, so the PXE boot would not get an IP address.
Solution:
Enable a static MAC on the VM and then import that information into Config Manager and add that computer to our “Imaging” device collection. System PXE booted and started imaging the system.
Thanks! This worked so well. I recently migrated to Windows 8.1 and am responsible for creating and maintaining our MDT deployments. PXE in Hyper-V should greatly simplify this task.
Cheers,
Chris
Thanks for the tip sheet, I had missed the step of adding the Legacy network adaptor and linking it to the bridged virtual switch, looking good now ๐
I’m PXE booting some Linux VM’s that are running on hyper-v, some are running on KVM, and a few bare metal servers
Hi, my hyper-v don’t have “Legacy Network Adapter”, what I need to do? I have “SCSI Controller”, “Network Adapter” and “Fibre chamnel Adapter”…thanks
Hi Fernando,
You must have created a Gen 2 Hyper-V machine. The legacy Adapter does not show in Gen 2.
hi
Thanks a lot mate it saved my day…
Cheers.
Hi Daniel,
Could you be so kind and explain me how can i connect from a physical workstation to a VM running on a standalone Hyper-V Server. Could the problem be that i have no DHCP Server running in my network ?
One addional question: Is it possible to assign a physical workstation to a VM ?
Thanks in advance
Cheers.
Hey there;
I have a working pxe environment that I’ve used for years to boot a ghost environment. It works great on physical machines but it doesn’t work with my hyper-v vm’s. My test vm gets an IP address ok and downloads the WDSNBP then I get the ‘Press F12 for network service boot’ but then I get ‘Windows Deployment Services: PXE Boot Aborted’. Any thoughts as to what might be going on?
WD
Don’t worry about it. I figured it out on my own.
WD
Whew. Thank you! Posts like this are so refreshing. Legacy Network Adapter did the trick!
Thank you for the Help! It is works fine
@Frank
This worked a treat! Thanks
Keep on working, great job!
Glad I found this post! Thank you!
I’m confused – this seems to indicate you can add a legacy adapter to an existing Gen2 VM in Hyper-V, but unless I’m missing something, that’s not possible. When you go to “add hardware” on a Gen2 VM there is NO option to add a “Legacy Network Adapter.”
Hi Dave,
Thanks for your comment! You are 100% correct in your comment, with your statement that the Legacy Network Adapter is not available for generation 2 VMs. This was a mistake by me, and I have now updated the blog post to reflect this. Thanks again!
so , it is possible find legacy Network adapter
Hi There,
In my case is opposite, it only works with virtual machines Gen1 but never works with Physical machines.
Press F12 for network service boot but then I get “PXE-53 no boot filename received.”
Any ideas? Please HELP.
Many Thanks in advance,
Hi Andy,
Please give more information regarding your troubles with the physical machines :).
Thanks,
/Daniel
Hi Daniel,
Thanks for your response so promptly,
My DHCP & SCCM are not on the same server.
I do not use any option such as 60,66 or 67.
Router has already stated forward broadcast to SCCM ip address.
WDS Service is ticked in DP but I did not configure.
PXE boot to Hyper-V machines without any problem. it deploys windows 10 successfully every time.
However, when I tried to PXE boot from any PCs. Error message as I mentioned above.
PCs I am testing on are varied brand and models: HP Z2, HP Compaq Elite8000, Lenovo T520, T570. All PCs drivers are installed in SCCM and BIOS are up-to-date.
I also have checked the Boot order in all devices Legacy and UEFI and selected “Both” and they are still not working.
Please advise.
Many Thanks
Hi Andy,
Could it perhaps be this issue? https://danielengberg.com/configuration-manager-is-looking-for-policy-sccm-pxe/
/Daniel
Hi Daniel,
As advised,
I checked your link and SMSPXE log file did not show any of error messages like you have.
However, in SCCM console, my boot image(x64) properties\Data Source\Architecture x86 is selected as default.
I selected radio button on “architecture x64” and Click apply and set it back to default x86.
How I could SAVE the settings?
Here are the details of my SCCM:
version 1910
Console version: 5.1910.1067.1600
Site version: 5.0.8913.1000
Boot image (x64): version 10.0.18362.1
Please advise,
Thanks
Hi Daniel,
Do you have further suggestion for me?
Many Thanks in advance,
Andy
Hi Daniel,
Good day!
I have setup Hyper-V as instructed and be able to run the CentOS 8 iso file but after the reboot (Reboot button clicked) it goes back to the Installation options. It is starting to install back again the CentOS 8. Based on CentOS 8 installation tutorial, I should be on the Licensing acceptance part and be able to use CentOS 8.
Please help me where did I go wrong or I need to do some changes again on the Hyper-V settings.
Thank you very much!
Best regards,
Melbourne
Hi Daniel,
I already figured it out. Eject Media. ๐
Thanks much.
Glad that you managed to figure it out yourself ๐
/Daniel
The legacy network adapter is no longer available. You can do the same thing by creating a regular network adapter with the external switch.
I et the Start PXE over IPv4 error only when I create a Gen 2 Virtual machine. Their is no problem with Gen 1. I want to use Gen 2 for Windows 11 Virtual machine. I’ve not been able to solve this problem
Any luck yet? I am in the same boat.