Vytvoření boot entry bez Hyper-V pomocí PowerShell skriptu

Development General

7 years ago

Často potřebuji na jedom počítači spouštět virtuální stroje pomocí VirtualBoxu a emulátory Windows Mobile běžící pod Hyper-V. Bohužel současně může být povolen pouze jeden z nich. Nejjednodušší řešení je vytvoření dvou boot entries - jeden se zapnutým a jeden s vypnutým Hyper-V.

Příkazová řádka

Skvělý Scott Hanselman popsal rychlý způsob pro vytvoření sekundráního boot entry pomocí příkazové řádky na svém blogu. Jako součást tvorby svého PowerShell Chocolatey instalačního skriptu pro usnadnění nastavení čisté instalace Windows jsem chtěl tuto úlohu zautomatizovat (a vyhnout se nutnosti copy-paste).

PowerShell skript

Skript je velmi jednoduchý:

$bcdResult = ( bcdedit /copy `{current`} /d "No Hyper-V" ) | Out-String
$bcdResult -match "\{.+\}"
bcdedit /set $matches[0] hypervisorlaunchtype off

První řádka skriptu spouští nástroj bcdedit a vytváří kopii aktuálního boot entry . Výsledkem je řetězec následujícího tvaru:

The entry was successfully copied to {XX-XX-XXX-XXXX-XXXXXXXX}.

Potřebujeme vyparsovat identifikátor mezi složenými závorkami. S tím nám vypomohou regulární výrazy na druhém řádku skriptu. Nalezené výsledky jsou uloženy v proměnné $matches . Nakonec použijeme nalezený identifikátor pro modifikaci nového boot entry s příkazem pro zakázání Hyper-V. A to je vše! Snadné, ale pohodlné. Skript můžete snadno spustit a nový boot entry bez Hyper-V se automaticky vytvoří. Nezapomeňte skript spouštět s administrátorskými právy. Skript si můžete stáhnout zde.