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

通过PowerShell从现有托管磁盘创建Azure VM的报错解决

问题:附加现有OS磁盘创建VM时提示osDisk.osType缺失

最初尝试的代码

# 获取现有磁盘和网络接口
$disk = Get-AzDisk -DiskName "MyDiskName" -ResourceGroupName "MyRgName"
$ni = Get-AzNetworkInterface -Name "MiNiName" -ResourceGroupName "MyRgName"

# 创建VM配置
$vmConfig = New-AzVMConfig -VMName "MyVmName" -VMSize "Standard_D2_v5" -SecurityType "TrustedLaunch" | `
Set-AzVMBootDiagnostic -Enable -ResourceGroupName "MyRgName" | `
Set-AzVMOSDisk -CreateOption "Attach" -ManagedDiskId $disk.Id | `
Add-AzVMNetworkInterface -Id $ni.Id.

# 创建VM
New-AzVM -VM $vmConfig -ResourceGroupName "MyRgName" -Location "Australia East"

执行New-AzVM时的报错

Required parameter 'osDisk.osType' is missing (null).

ErrorCode: InvalidParameter

ErrorMessage: Required parameter 'osDisk.osType' is missing (null).

ErrorTarget: osDisk.osType

StatusCode: 400

ReasonPhrase:

OperationID : d5e4e899-6c4e-42e8-94fd-47f0350ab7a5

尝试添加OS参数后的错误

我尝试在Set-AzVMOSDisk中添加系统类型参数,命令如下:

Set-AzVMOSDisk -Windows -CreateOption "Attach" -ManagedDiskId $disk.Id

得到错误:

Set-AzVMOSDisk:

Line 3

Set-AzVMOSDisk -Windows -CreateOption "Attach" -ManagedDiskId $disk.I …

Parameter set cannot be resolved using the specified named parameters. One or more parameters issued cannot be used together or an insufficient number of parameters were provided.

磁盘已有OS类型信息

现有磁盘的属性中已经包含了osType信息,无需手动指定:

"name": "MyDiskName",
"type": "Microsoft.Compute/disks",
"location": "australiaeast",
"sku": {
   "name": "StandardSSD_LRS",
   "tier": "Standard"
},
"properties": {
   "osType": "Windows",
   "hyperVGeneration": "V2",
   "supportedCapabilities": {
      "diskControllerTypes": "SCSI",
      "acceleratedNetwork": true,
      "architecture": "x64"
   }
}

解决方案

问题出在两个细节上:

  1. Add-AzVMNetworkInterface的参数末尾多了一个点号$ni.Id.,需要删除;
  2. 虽然磁盘本身包含osType信息,但使用Set-AzVMOSDisk附加磁盘时,必须通过-OsType参数明确指定(不能用-Windows或-Linux,这两个参数属于另一组参数集,和-CreateOption Attach不兼容)。

修正后的完整代码:

# 获取现有磁盘和网络接口
$disk = Get-AzDisk -DiskName "MyDiskName" -ResourceGroupName "MyRgName"
$ni = Get-AzNetworkInterface -Name "MiNiName" -ResourceGroupName "MyRgName"

# 创建VM配置
$vmConfig = New-AzVMConfig -VMName "MyVmName" -VMSize "Standard_D2_v5" -SecurityType "TrustedLaunch" | `
Set-AzVMBootDiagnostic -Enable -ResourceGroupName "MyRgName" | `
Set-AzVMOSDisk -CreateOption "Attach" -ManagedDiskId $disk.Id -OsType $disk.OsType | `
Add-AzVMNetworkInterface -Id $ni.Id

# 创建VM
New-AzVM -VM $vmConfig -ResourceGroupName "MyRgName" -Location "Australia East"

说明:

  • 移除了$ni.Id末尾的多余点号,修复语法错误;
  • 使用-OsType $disk.OsType直接从已获取的磁盘对象中读取osType值,既符合参数集要求,又避免手动输入错误。

内容的提问来源于stack exchange,提问作者String.Empty

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 13:23:27