Hyper-V 虚拟机具有 PXE 启动功能。显然,PXE 启动引发一些安全担忧。问题是,与典型的物理机固件不同,没有明显的方法可以完全禁用 PXE 启动。
Hyper-V 管理器显示每个 VM 的网络适配器Settings=>Firmware=>Boot Order
:
您可以将网络适配器移至启动顺序的底部,但不能将其从该屏幕中完全移除。因此,如果由于某种原因,Hyper-V 无法从任何其他驱动器启动,则 VM 仍会尝试 PXE 启动并显示此屏幕:
我已经尝试过Settings=>Network Adapter
禁用 PXE 启动的方法,但是无济于事。
我的问题是:
- 如何在 Hyper-V VM 中禁用 PXE 启动?
- 如果您无法禁用 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 存储会自动拾取它吗?