通过PowerShell配置VM ISO引导失败问题排查求助
问题描述
我执行了以下操作:先将ISO文件挂载到虚拟机(VM)的CD驱动器,再修改VM的启动顺序,但重启VM后并未进入ISO的引导流程。
挂载ISO到CD驱动器的代码
$CloneVM = Get-VM -Name "999_SW999OSTest_Clone" $IsoPath = "[STG5_DISTR_HPERF_DARY_NPROD_LUN-01_DEV_3333] Patches/SW_DVD9_Win_Server_STD_CORE_2019_1809.2_64Bit_English_DC_STD_MLF_X22-18452.ISO" $CDDrive = Get-CDDrive -VM $CloneVM $CDDrive | Set-CDDrive -ISOPath $IsoPath -Confirm:$false -StartConnected:$true
修改启动顺序的代码
#Connect-VIServer -Server 12.8.1.13 $strVMName = "999_SW999OSTest_Clone" $strBootNICDeviceName = "Network adapter 1" $strBootHDiskDeviceName = "Hard disk 1" $vm = Get-VM $strVMName $intNICDeviceKey = ($vm.ExtensionData.Config.Hardware.Device | ?{$_.DeviceInfo.Label -eq $strBootNICDeviceName}).Key $oBootableNIC = New-Object -TypeName VMware.Vim.VirtualMachineBootOptionsBootableEthernetDevice -Property @{"DeviceKey" = $intNICDeviceKey} $intHDiskDeviceKey = ($vm.ExtensionData.Config.Hardware.Device | ?{$_.DeviceInfo.Label -eq $strBootHDiskDeviceName}).Key $oBootableHDisk = New-Object -TypeName VMware.Vim.VirtualMachineBootOptionsBootableDiskDevice -Property @{"DeviceKey" = $intHDiskDeviceKey} $oBootableCDRom = New-Object -Type VMware.Vim.VirtualMachineBootOptionsBootableCdromDevice $spec = New-Object VMware.Vim.VirtualMachineConfigSpec -Property @{ "BootOptions" = New-Object VMware.Vim.VirtualMachineBootOptions -Property @{ BootOrder = $oBootableCDRom, $oBootableNIC, $oBootableHDisk } } $vm.ExtensionData.ReconfigVM_Task($spec)
启动顺序输出结果
BootDelay : 0 EnterBIOSSetup : False EfiSecureBootEnabled : False BootRetryEnabled : False BootRetryDelay : 10000 BootOrder : {VMware.Vim.VirtualMachineBootOptionsBootableCdromDevice, 4000, 2000} NetworkBootProtocol : ipv4
请问我遗漏了什么配置?
排查与修复方案
1. 补全CD驱动器的实时连接配置
你设置了-StartConnected:$true(下次启动时连接),但还需要确保当前CD驱动器处于连接状态,避免挂载失效:
$CDDrive | Set-CDDrive -Connected:$true -Confirm:$false
2. 为CD-ROM引导项关联具体设备Key
从启动顺序输出看,CD-ROM项未绑定具体设备Key,VM可能无法识别要从哪个CD驱动器引导。补充以下步骤:
# 获取CD驱动器的设备Key(标签根据实际情况调整,比如"CD/DVD drive 1") $intCDDriveKey = ($vm.ExtensionData.Config.Hardware.Device | ?{$_.DeviceInfo.Label -eq "CD/DVD drive 1"}).Key # 创建带设备Key的CD-ROM引导对象 $oBootableCDRom = New-Object -TypeName VMware.Vim.VirtualMachineBootOptionsBootableCdromDevice -Property @{"DeviceKey" = $intCDDriveKey}
重新生成配置并应用即可。
3. 强制单次从CD引导
添加BootOnce配置,强制虚拟机仅下次启动时遵循设置的引导顺序,避免系统自动修改引导优先级:
$spec = New-Object VMware.Vim.VirtualMachineConfigSpec $spec.BootOptions = New-Object VMware.Vim.VirtualMachineBootOptions $spec.BootOptions.BootOrder = $oBootableCDRom, $oBootableNIC, $oBootableHDisk # 开启单次引导 $spec.BootOptions.BootOnce = $true $vm.ExtensionData.ReconfigVM_Task($spec)
4. 验证ISO与引导模式兼容性
- 若虚拟机用UEFI模式,确认ISO包含UEFI引导文件(如
EFI目录); - 若用BIOS模式,检查ISO根目录是否有
bootmgr或isolinux等BIOS引导文件; - 确保
EfiSecureBootEnabled设置与ISO要求匹配(你的输出已设为False,若ISO需安全启动则调整为True)。
5. 检查ISO文件有效性
手动在vSphere客户端中尝试挂载该ISO,确认存储路径正确、ISO文件未损坏。
内容的提问来源于stack exchange,提问作者snehasish nandy
相关产品推荐
相关产品推荐

