Go to ...

RSS Feed

Make Windows Boot menu work for you


After a clean install of Windows 10, or after deploying my standard deployment image with MDT, I always want to make sure I have the boot menu set up in such a way that I can boot to whatever OS I need to use. There are several third party tools available to edit boot menus, the most popular being EasyBCD. But personally I have never understood why I should use third party tools for something that Windows is more than capable of handling with its own native, built-in tools. For my boot menu edits, I only use two native Windows commands, bcdedit and bcdboot.

In this post I will show how I set up a boot menu in a freshly installed Windows 10. I hope this will give you some ideas about how to make the Windows boot menu work for you, just the way you want it to.

First, my deployment image always contains Macrium Reflect. It is my chosen imaging application, which I wholeheartedly recommend. As soon as I am on the desktop after deployment or clean install, I will create Macrium Rescue media as an ISO file. I mount that ISO, and copy its contents to a small 1 GB partition I have created for it on a secondary HDD. I then add it to the Windows boot menu using this small batch file run in an elevated Command Prompt (all commands shown in this post require Command Prompt elevation):

@ECHO OFF
TITLE Add Macrium Reflect Rescue to Windows boot menu
:SETLETTER
CLS
ECHO.
ECHO             ###################################################
ECHO             #                                                 #
ECHO             #    This batch file creates Macrium  Rescue      #
ECHO             #   environment adding it to Windows boot menu.   #
ECHO             #                                                 #
ECHO             ###################################################
ECHO.
SET /P DRIVELETTER= ^-- Please enter drive letter for your custom recovery partition (without colon): 
IF NOT EXIST %DRIVELETTER%:\sources\boot.wim ECHO. & ECHO No valid Windows image found on given partition %DRIVELETTER% &ECHO. & PAUSE & GOTO :SETLETTER
ECHO.
bcdedit /create {ramdiskoptions} /d "Ramdisk"
bcdedit /set {ramdiskoptions} ramdisksdidevice partition=%DRIVELETTER%:
bcdedit /set {ramdiskoptions} ramdisksdipath \boot\boot.sdi
for /f "tokens=2 delims={}" %%i in ('bcdedit.exe /create /d "Recovery" /application OSLOADER') do (set guid={%%i})
bcdedit /set %guid% device ramdisk=[%DRIVELETTER%:]\sources\boot.wim,{ramdiskoptions}
bcdedit /set %guid% path \windows\system32\winload.efi
bcdedit /set %guid% osdevice ramdisk=[%DRIVELETTER%:]\sources\boot.wim,{ramdiskoptions}
bcdedit /set %guid% systemroot \windows
bcdedit /set %guid% winpe yes
bcdedit /set %guid% detecthal yes
bcdedit /set %guid% description "Macrium Reflect"
bcdedit /displayorder %guid% /addlast
pause

This batch file almost always stays the same. In fact, it is an only slightly modified version of the one shown in my earlier post about creating a custom recovery drive. Running this batch file is shown as #1 in next screenshot.

The next step for me is to deploy the current Windows 10 general availability version to a VHD, for use as a native boot VHD. I use Insider Fast Ring builds on my computers, but occasionally need access to the latest GA version, so I can assist other users and get screenshots.  A native boot VHD is ideal for this kind of occasional use:

When deployed, I will add it to the Windows boot menu (#2 in next screenshot) with the following command (note F: is the drive letter assigned to the mounted VHD file):

bcdboot F:\Windows

OK, next step: I will change the name (description) shown in the boot menu for my main OS (#3 in screenshot):

bcdedit /set {current} description "W10 Pro - Hyper-V"

I will also change the name for the native boot VHD entry (#4):

bcdedit /set {default} description "W10 Pro - VHD"

Adding the VHD to the boot menu made it the Default OS, the one started if a user makes no choice on the boot menu screen, thus, the identifier is {default}. Boot entry identifiers are 32-bit hexadecimal strings, with two exceptions: the OS you are currently using will be {current}, and if it is different than your default OS, the default OS is identified as {default}. The last OS you add with the bcdboot command will be added as {default}, if no switches are used with bcdboot command.

I am a huge Hyper-V fan, and use it for all Windows virtual machines, and for most Linux virtual machines. But, to be honest, some Linux distros are easier to use and configure on VMware than on Hyper-V. However, type 2 hypervisors like VMware Workstation and Oracle VirtualBox do not work if a type 1 hypervisor like Hyper-V is present (Wikipedia; Hypervisor Types). When Hyper-V is enabled and its hypervisor is turned on, you can install VMware but you can’t run its virtual machines.

To work around this, I will copy the boot records for my current, hypervisor-enabled boot entry to a new entry with following command (#5):

bcdedit /copy {current} /d "W10 Pro - VMware"

… and turn Hypervisor off for that entry to allow type 2 hypervisors to run (#6):

bcdedit /set {identifier copied from previous command} hypervisorlaunchtype OFF

I also want the boot menu to have options to boot to minimal Safe Mode, without networking, and to boot to Safe Mode with networking. I will copy my current boot entry two more times, naming new entries as Safe Mode – Minimal and Safe Mode – Network (#7 & #8):

Click to open enlarged in a new tab.

Next, I need to modify those two Safe Mode entries. It’s easily done using the System Configuration app. Run it (WIN + R, type msconfig, hit Enter), select first the Safe Mode – Minimal boot entry in Boot tab, select Minimal in Boot options, select Make all boot settings permanent:

Click to open enlarged in a new tab.

Repeat this with boot entry Safe Mode – Network, this time selecting Nework in Boot options:

Click to open enlarged in a new tab.

I want my current OS, W10 Pro on SSD to be the default OS. I’ll make it so with following command:

bcdedit /default {current}

Last thing, I will change the order in which my six boot menu entries are shown. For that, I need identifiers for all entries. I will copy the bootrecords to a text file bcdedit.txt with following command:

bcdedit > E:\Users\Kari\bcdedit.txt

Opening the text file in Notepad next to elevated Command Prompt, I enter the following command, copying identifiers from text file and pasting them to the command in Command Prompt:

bcdedit /displayorder identifier1 identifier2 identifier3 identifier4 identifier5 identifier6

Click to open enlarged in a new tab.

Notice the syntax, identifiers are separated with a space.

That’s it, my Windows 10 boot menu is now exactly how I want it:

Click to open enlarged in a new tab.

 

Kari

Author: Kari Finn

A former Windows Insider MVP, Kari started in computing in the mid 80’s writing code for VAX / VMS systems. Since then, he’s worked in a variety of IT positions. He specializes in Windows image capture, customization, repair and deployment as well as Hyper-V virtualization. Kari is a proud Team Member at number #1 Windows site TenForums.com.

4 Responses “Make Windows Boot menu work for you”

  1. Toni Fasth
    May 8, 2019 at 13:07

    This is an awesome article! Covers the most usable scenarios. Thanks a ton for this!

  2. CountMike
    May 8, 2019 at 14:12

    I have dual boot with W10 current version and Skippy (separate SSDs)
    Safe boot with networking (no use for it unless network is available) and a Macrium Reflect.
    Those are set on both disks with Windows so I have them available if I have to choose boot disk from BIOS. All of those are noted in msconfig.
    Now comes some funny staff. On SSD with regular W10 (1809 for now) i have some entries that don’t appear in msconfig.
    One is labeled only as “Disk” and when I try to boot from it, it just goes to old style Repair menu which does nothing.
    There’s also “CD Rom” entry although I don’t have one installed at all. When I choose it, computer boots to default disk.
    Another entry is UEFI-disk, also does nothing but boots to default disk too. There are also couple of other options that lead to nothing but default disk.
    I suspect that they are all somehow written in UEFI partition because I can’t find them anywhere else.
    How do I find those “extra” entries ?

    • May 8, 2019 at 15:01

      Have you tried to reset Boot Menu with Macrium? Boot to Macrium Rescue, then select Fix Windows boot problems:

      null

      Select your OS from following dialog, and restart. Boot menu should now be cleared, and you can re-add other entries to it with bcdedit.

Leave a Reply