通过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" } }
解决方案
问题出在两个细节上:
Add-AzVMNetworkInterface的参数末尾多了一个点号$ni.Id.,需要删除;- 虽然磁盘本身包含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
相关产品推荐
相关产品推荐

