可以禁用 Hyper-V VM 的 PXE 启动吗?

可以禁用 Hyper-V VM 的 PXE 启动吗?

Hyper-V 虚拟机具有 PXE 启动功能。显然,PXE 启动引发一些安全担忧。问题是,与典型的物理机固件不同,没有明显的方法可以完全禁用 PXE 启动。

Hyper-V 管理器显示每个 VM 的网络适配器Settings=>Firmware=>Boot Order

在此处输入图片描述

您可以将网络适配器移至启动顺序的底部,但不能将其从该屏幕中完全移除。因此,如果由于某种原因,Hyper-V 无法从任何其他驱动器启动,则 VM 仍会尝试 PXE 启动并显示此屏幕:

在此处输入图片描述

我已经尝试过Settings=>Network Adapter禁用 PXE 启动的方法,但是无济于事。

我的问题是:

  1. 如何在 Hyper-V VM 中禁用 PXE 启动?
  2. 如果您无法禁用 PXE 启动,有什么原因吗?

我正在使用 Windows Server 2012 R2

答案1

使用 Powershell 从启动顺序中删除网络启动设备

Network BootType您可以使用 PowerShell从虚拟机启动顺序中删除s。

提取当前启动顺序

使用 Powershell,您可以使用此命令来提取当前启动顺序:

$old_boot_order = Get-VMFirmware -VMName testvm -ComputerName MyHyperVHost `
                  | Select-Object -ExpandProperty BootOrder

如果你检查,$old_boot_order你应该会看到启动设备列表testvm。类似这样的内容:

在此处输入图片描述

剥离网络启动设备

您可以使用以下命令从启动列表中删除启动设备Network BootType

$new_boot_order = $old_boot_order | Where-Object { $_.BootType -ne "Network" }

检查看起来$new_boot_order应该是这样的,没有更多的Network启动设备:

在此处输入图片描述

设置新的启动顺序

要为虚拟机设置新的启动顺序,请使用以下命令:

Set-VMFirmware -VMName testvm -ComputerName MyHyperVHost -BootOrder $new_boot_order

确认新的启动顺序

要确认你做了什么,请Get-VMFirmware再次使用第一个命令:

Get-VMFirmware -VMName testvm -ComputerName MyHyperVHost `
| Select-Object -ExpandProperty BootOrder

注意:如果您同时使用 PowerShell 和 Hyper-V 管理器来更改启动顺序,PowerShell 可能会报告错误的(过时的)启动顺序。另请参阅此 Technet 主题

答案2

如果有人来这里寻找第 1 代虚拟机解决方案,我最终到处寻找它。

发现很简单,在MS官方文档中:

https://docs.microsoft.com/en-us/powershell/module/hyper-v/set-vmbios?view=win10-ps

Set-VMBios TestVM -StartupOrder @("Floppy", "LegacyNetworkAdapter", "CD", "IDE")

此示例配置虚拟机 TestVM 按以下顺序检查启动设备:软盘、网络、CD 驱动器、硬盘。

我也Set-VMBios支持它,它是为了可读性,而 MS 文档显然使用更短的形式。-VMName <name of VM>

答案3

您提到的那些固件条目属于固件应用程序 (101fffff) 类型。可以使用 bcdedit 从客户机操作系统内部控制它们,虚拟机管理程序将复制更改:

https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-vista/cc749510(v=ws.10)

主持人:

get-vmfirmware six

VMName SecureBoot SecureBootTemplate PreferredNetworkBootProtocol BootOrder
------ ---------- ------------------ ---------------------------- ---------
Six    Off        MicrosoftWindows   IPv4                         {File, Drive, Network}

客人:

bcdedit /enum all /v

Firmwareanwendung (101fffff)
----------------------------
Bezeichner              {e56c0c0b-9e14-11eb-8bb5-00155d001627}
description             EFI Network

bcdedit /delete {e56c0c0b-9e14-11eb-8bb5-00155d001627}

该条目已从 Hyper 固件页面中删除(如果设置当前处于打开状态,请点击固件页面上的刷新按钮)

get-vmfirmware six

VMName SecureBoot SecureBootTemplate PreferredNetworkBootProtocol BootOrder
------ ---------- ------------------ ---------------------------- ---------
Six    Off        MicrosoftWindows   IPv4                         {File, Drive} <<< no network

但是如果我们移除硬盘会怎么样?

Firmwareanwendung (101fffff)
----------------------------
Bezeichner              {e56c0c0c-9e14-11eb-8bb5-00155d001627}
description             EFI SCSI Device

bcdedit /delete {e56c0c0c-9e14-11eb-8bb5-00155d001627}

恭喜,您刚刚关闭了您的机器。Hyper-v Gui 页面上没有选项可以修复此问题,客户重新启动也无法修复此问题,因此感谢您提供 powershell 命令来修复此问题,我刚刚测试过,它有效。在 Hyper GUI 中,有一种修复固件的愚蠢方法,即打开硬盘页面,更改 SCSI 编号,单击“应用”,然后将其改回,再次点击“应用”。这是 MS 为您准备的。

当通过 bcdedit 删除固件应用程序时,真实计算机上会发生什么情况?主板(或神秘的 NVRAM 所在的任何地方)是否会在重启后重新创建固件条目?然后 bcd 存储会自动拾取它吗?

相关内容