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

New-AzVM创建恢复Azure VM时触发ParameterBindingValidationException错误

Azure VM恢复:New-AzVM报VM参数null的深层原因与修复

问题核心

你遇到的ParameterBindingValidationException是表象,实际根源是VM配置对象的OS配置部分损坏,导致New-AzVM无法识别有效配置,进而抛出参数为空的错误。结合你发现的Failed to set OS configuration和空引用错误,问题出在OS磁盘与操作系统配置的参数冲突上。

具体原因与修复步骤

1. 重复指定OS系统类型导致配置冲突

你的脚本中同时在Set-AzVMOperatingSystem和Set-AzVMOSDisk命令中添加了-Windows参数,这会导致VM配置对象的OS元数据冲突,进而损坏整个配置对象。

修复:移除Set-AzVMOSDisk后的-Windows参数
当使用-CreateOption Attach模式时,托管磁盘本身已经包含了OS类型信息,无需重复指定。修改后的配置代码如下:

$vmCfg = New-AzVMConfig -VMName "${vmName}-Restored" -VMSize $vmSize |
         Set-AzVMOperatingSystem -Windows -ComputerName "${vmName}-Restored" `
                                 -ProvisionVMAgent -EnableAutoUpdate |
         Set-AzVMOSDisk -ManagedDiskId $osDisk.Id -CreateOption Attach

2. 验证托管磁盘的OS类型一致性

检查你从快照创建的托管磁盘实际OS类型是否与脚本指定的Windows匹配:

# 查看托管磁盘的OS类型
Get-AzDisk -ResourceGroupName $restoreResourceGroup -Name $osDisk.Name | Select-Object StorageProfile

如果输出的OsType不是Windows,需要调整Set-AzVMOperatingSystem的参数(比如改为-Linux),确保与磁盘的实际类型一致。

3. 强制验证VM配置对象的完整性

在执行New-AzVM前,添加代码检查配置对象的关键属性是否存在:

# 检查VM配置的OS和网络接口信息
Write-Output "OS Disk配置: $($vmCfg.StorageProfile.OsDisk.ManagedDisk.Id)"
Write-Output "网络接口ID: $($vmCfg.NetworkProfile.NetworkInterfaces[0].Id)"

如果输出为空或报错,说明配置对象确实损坏,需要重新排查前面的配置步骤。

修改后的完整脚本片段

# 6. Create Restored VM
$vmCfg = New-AzVMConfig -VMName "${vmName}-Restored" -VMSize $vmSize |
         Set-AzVMOperatingSystem -Windows -ComputerName "${vmName}-Restored" `
                                 -ProvisionVMAgent -EnableAutoUpdate |
         Set-AzVMOSDisk -ManagedDiskId $osDisk.Id -CreateOption Attach

$vmCfg = Add-AzVMNetworkInterface -VM $vmCfg -Id $nic.Id

# 验证配置完整性
Write-Output "验证VM配置:"
Write-Output "VM名称: $($vmCfg.Name)"
Write-Output "关联OS磁盘ID: $($vmCfg.StorageProfile.OsDisk.ManagedDisk.Id)"
Write-Output "关联NIC ID: $($vmCfg.NetworkProfile.NetworkInterfaces[0].Id)"

try {
    New-AzVM -ResourceGroupName $restoreResourceGroup `
             -Location $location `
             -VM $vmCfg
    Write-Output " VM '${vmName}-Restored' deployed successfully."
} catch {
    Write-Error "VM部署失败: $_"
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 16:45:18