使用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
相关产品推荐
相关产品推荐

