You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

批量创建Hyper-V虚拟机时启动顺序报错的解决方法咨询

解决Hyper-V批量创建VM时Set-VMBios启动顺序报错问题

报错信息

Set-VMBios : Cannot validate argument on parameter ‘StartupOrder’. The argument is null or empty. Provide an argument that is not null or empty, and then try the command again.
At C:\Users\Administrator\Documents\v6\vmsv6.ps1:40 char:46
Set-VMBios -VMName $VMName -StartupOrder $DVD
CategoryInfo : InvalidData: (:) [Set-VMBios], ParameterBindingValidationException
FullyQualifiedErrorId : ParameterArgumentValidationError,Microsoft.HyperV.PowerShell.Commands.SetVMBios

原脚本

for ($Counter=1; $Counter -le 2; $Counter++) {
    $VMName = "VM0" + $Counter
    $Generation = 1
    $Cpu = 2
    $Memory = 1024MB
    $VMPath = "C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\$VMName"
    $ISOPath = "C:\Users\Administrator\Downloads\WindowsServer2019.iso"
    $VHDXPath = "$VMPath\DATA_Disk.vhdx"
    $VHDSize = 1GB

    New-VM -Name $VMName -Path $VMPath -MemoryStartupBytes $Memory -Generation $Generation 

    Set-VMProcessor -VMName $VMName -Count $Cpu

    New-VHD -SizeBytes $VHDSize -Path $VHDXPath -Fixed

    Add-VMHardDiskDrive -VMName $VMName -Path $VHDXPath -ControllerNumber 0 -ControllerLocation 0 

    Add-VMDvdDrive -VMName $VMName -Path $ISOPath -ControllerNumber 0 -ControllerLocation 1

    $Bios = Get-VMBios -VMName $VMName
    $DVD = $Bios.BootOrder | Where-Object { $_.DeviceType -eq ‘DvdDrive’ }
    Set-VMBios -VMName $VMName -StartupOrder $DVD

    Start-VM -Name $VMName
}

问题分析与解决方法

核心问题

  1. 中文引号导致匹配失败:脚本中Where-Object使用了中文单引号‘DvdDrive’,PowerShell无法识别该符号,导致$DVD变量为空。
  2. 参数格式错误:Set-VMBios的-StartupOrder参数要求传入完整的启动设备数组,而非单个设备对象,仅传DVD设备不符合参数要求。

修改步骤

  1. 将中文单引号替换为英文单引号,确保Where-Object能正确筛选出DVD设备。
  2. 构造完整的启动顺序数组:将DVD设备移至启动顺序首位,保留其他原有启动设备。
  3. 可选添加短暂延迟,确保Hyper-V完成设备添加同步后再获取BIOS信息。

修改后的完整脚本

for ($Counter=1; $Counter -le 2; $Counter++) {
    $VMName = "VM0" + $Counter
    $Generation = 1
    $Cpu = 2
    $Memory = 1024MB
    $VMPath = "C:\Users\Public\Documents\Hyper-V\Virtual Hard Disks\$VMName"
    $ISOPath = "C:\Users\Administrator\Downloads\WindowsServer2019.iso"
    $VHDXPath = "$VMPath\DATA_Disk.vhdx"
    $VHDSize = 1GB

    New-VM -Name $VMName -Path $VMPath -MemoryStartupBytes $Memory -Generation $Generation 

    Set-VMProcessor -VMName $VMName -Count $Cpu

    New-VHD -SizeBytes $VHDSize -Path $VHDXPath -Fixed

    Add-VMHardDiskDrive -VMName $VMName -Path $VHDXPath -ControllerNumber 0 -ControllerLocation 0 

    Add-VMDvdDrive -VMName $VMName -Path $ISOPath -ControllerNumber 0 -ControllerLocation 1

    # 延迟1秒确保设备同步
    Start-Sleep -Seconds 1

    $Bios = Get-VMBios -VMName $VMName
    # 使用英文引号筛选DVD设备
    $DVD = $Bios.BootOrder | Where-Object { $_.DeviceType -eq 'DvdDrive' }
    # 构造完整启动顺序:DVD优先,其余设备按原有顺序
    $newStartupOrder = @($DVD) + ($Bios.BootOrder | Where-Object { $_.DeviceType -ne 'DvdDrive' })
    Set-VMBios -VMName $VMName -StartupOrder $newStartupOrder

    Start-VM -Name $VMName
}

内容的提问来源于stack exchange,提问作者Ram Fuertes

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 05:39:51