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

使用PowerShell从快照创建Azure VM时遇osProfile参数不允许问题求助

问题描述

使用PowerShell从Windows 10快照创建磁盘,再创建VM并挂载该系统磁盘时,执行New-AzVM命令报错:

New-AzVM : Parameter 'osProfile' is not allowed

该问题在微软近期更新Az模块后出现,官方暂无相关解决指引,第三方消息称微软不会修复此问题。此外,新版New-AzVM要求必填-ComputerName参数并提供凭据,但添加这些字段后脚本仍执行失败。

原脚本如下:

$snapshot = Get-AzSnapshot -ResourceGroupName RG -SnapshotName snap-mysnapshot
$diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot.Id -OsType Windows
New-AzDisk -Disk $diskConfig -ResourceGroupName RG -DiskName 123456789 -Verbose
$osDisk = Get-AzDisk -ResourceGroupName RG -DiskName 123456789

$azureLocation              = "EastUS"
$azureVmOsDiskName          = "123456789"
$azureVmSize                = "Standard_F4s_v2"
$azureNicName               = "123456789"
$azurePublicIpName          = "123456789"
$azureVnetName              = "25"
$azureVnetSubnetName        = "111"

$azureVnetSubnet = (Get-AzVirtualNetwork -Name $azureVnetName -ResourceGroupName RG).Subnets | Where-Object {$_.Name -eq $azureVnetSubnetName}

$azureNIC = New-AzNetworkInterface -Name 123456789 -ResourceGroupName RG -Location $azureLocation -SubnetId $azureVnetSubnet.Id -Force

$ComputerName = "ComputerName"
$VMLocalAdminUser = "admin"
$VMLocalAdminSecurePassword = ConvertTo-SecureString "Password" -AsPlainText -Force
$Credential = New-Object System.Management.Automation.PSCredential ($VMLocalAdminUser,     $VMLocalAdminSecurePassword);
  
$VirtualMachine = New-AzVMConfig -VMName 123456789 -VMSize $azureVmSize
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $azureNIC.Id -DeleteOption Delete
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -ManagedDiskId $osDisk.Id -StorageAccountType Premium_LRS -Name 123456789 -CreateOption Attach -Windows -DeleteOption Delete -Verbose
$VirtualMachine = Set-AzVMOperatingSystem -VM $VirtualMachine -Credential $Credential -ComputerName $ComputerName -Windows -Verbos -ProvisionVMAgent -EnableAutoUpdate

New-AzVM -ResourceGroupName RG -Location $azureLocation -VM $VirtualMachine -Verbose
解决方法

问题核心:当挂载已包含操作系统配置的现有磁盘(从快照复制的系统盘)时,不需要通过Set-AzVMOperatingSystem设置osProfile,新版Az模块会因为同时存在Attach类型的OS磁盘和手动设置的osProfile产生冲突,导致报错。

修正后的脚本需删除Set-AzVMOperatingSystem这一行,同时修正原脚本中的拼写错误(-Verbos改为-Verbose):

$snapshot = Get-AzSnapshot -ResourceGroupName RG -SnapshotName snap-mysnapshot
$diskConfig = New-AzDiskConfig -AccountType $storageType -Location $location -CreateOption Copy -SourceResourceId $snapshot.Id -OsType Windows
New-AzDisk -Disk $diskConfig -ResourceGroupName RG -DiskName 123456789 -Verbose
$osDisk = Get-AzDisk -ResourceGroupName RG -DiskName 123456789

$azureLocation              = "EastUS"
$azureVmOsDiskName          = "123456789"
$azureVmSize                = "Standard_F4s_v2"
$azureNicName               = "123456789"
$azurePublicIpName          = "123456789"
$azureVnetName              = "25"
$azureVnetSubnetName        = "111"

$azureVnetSubnet = (Get-AzVirtualNetwork -Name $azureVnetName -ResourceGroupName RG).Subnets | Where-Object {$_.Name -eq $azureVnetSubnetName}

$azureNIC = New-AzNetworkInterface -Name 123456789 -ResourceGroupName RG -Location $azureLocation -SubnetId $azureVnetSubnet.Id -Force
  
$VirtualMachine = New-AzVMConfig -VMName 123456789 -VMSize $azureVmSize
$VirtualMachine = Add-AzVMNetworkInterface -VM $VirtualMachine -Id $azureNIC.Id -DeleteOption Delete
$VirtualMachine = Set-AzVMOSDisk -VM $VirtualMachine -ManagedDiskId $osDisk.Id -StorageAccountType Premium_LRS -Name 123456789 -CreateOption Attach -Windows -DeleteOption Delete -Verbose

New-AzVM -ResourceGroupName RG -Location $azureLocation -VM $VirtualMachine -Verbose
说明
  • 从快照复制的系统磁盘已经包含原VM的操作系统配置(包括管理员账户、计算机名等),因此不需要再次通过Set-AzVMOperatingSystem指定这些参数。
  • 新版Az模块对VM配置的校验更严格,不允许同时存在Attach类型的OS磁盘和手动设置的osProfile,这就是报错的根本原因。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 07:04:57