使用PowerShell创建Azure VMSS时指定OS Disk名称报错如何解决
报错原因
你遇到的Parameter 'osDisk.name' is not allowed报错是Azure VMSS的平台原生限制:Azure虚拟机规模集的OS磁盘名称默认由平台自动生成,不支持直接通过Set-AzVmssStorageProfile的-OsDiskName参数指定固定OS磁盘名称,因为VMSS会动态扩缩实例,每个实例的OS磁盘需要唯一标识,固定名称会导致冲突。
解决方法
如果要自定义OS磁盘的命名规则,避免随机后缀,需要通过配置VMSS的OS磁盘命名策略实现,步骤如下:
- 首先去掉
Set-AzVmssStorageProfile命令里的-OsDiskName $OSDiskName参数,这是导致报错的直接原因 - 新增OS磁盘自定义命名规则配置,规则支持两个占位符保证名称全局唯一:
{VMSSName}:自动替换为你设置的VMSS名称{VMInstanceId}:自动替换为VMSS实例的唯一ID,必须保留该占位符避免磁盘名称冲突
调整后的完整可运行命令示例:
# 先创建基础VMSS配置,需确保编排模式为Flexible,仅灵活编排模式支持自定义磁盘命名 $vmssConfig = New-AzVmssConfig -Location $location -SkuCapacity 2 -SkuName "Standard_D2s_v3" -OrchestrationMode Flexible # 配置存储配置,删除原-OsDiskName参数 Set-AzVmssStorageProfile $vmssConfig ` -OsDiskCreateOption "FromImage" ` -ImageReferenceId $galleryImage.Id ` -OsDiskCaching ReadWrite ` -OsDiskSizeGB 128 # 新增:自定义OS磁盘命名规则,可按需修改CustomNamingPattern的前缀部分 $vmssConfig.VirtualMachineProfile.StorageProfile.OsDisk.NamingPolicy = @{ "NamingConvention" = "Custom" "CustomNamingPattern" = "你自定义的前缀-{VMInstanceId}" } # 剩余原有配置不变 Set-AzVmssOsProfile $vmssConfig ` -AdminUsername $username ` -AdminPassword $Password ` -ComputerNamePrefix "UKSSPAG" Add-AzVmssNetworkInterfaceConfiguration -VirtualMachineScaleSet $vmssConfig -Name "NICConfig" -Primary $true -IPConfiguration $ipConfig New-AzVmss -ResourceGroupName $resourceGroup -VMScaleSetName $scaleSetName -VirtualMachineScaleSet $vmssConfig
注意事项
- 自定义命名规则总长度不能超过80个字符,同时要符合Azure磁盘的命名规范:只能包含小写字母、数字、连字符,不能以连字符开头或结尾
{VMInstanceId}是必填占位符,删除会导致实例创建时磁盘名称冲突- 该功能仅支持编排模式为Flexible(灵活编排)的VMSS,经典统一编排模式不支持自定义OS磁盘名称
内容的提问来源于stack exchange,提问作者Parmar
相关产品推荐
相关产品推荐

