如何在PowerShell7中使用Get-AzVMImage的latest参数获取最新Azure VM镜像
问题原因与解决方法
核心原因
Get-AzVMImage cmdlet的-Version参数本身不支持传入latest作为有效值,官方文档提到的latest指代最新版本的用法,仅适用于创建虚拟机时指定镜像URN的场景,不适用于直接查询镜像的场景。
- Azure镜像查询API要求
version入参必须是真实存在的版本号字符串,因此传入latest会触发参数无效报错 - 创建虚拟机时,Azure后端会自动解析URN中的
latest占位符为当前最新的镜像版本,不需要提前查询具体版本号
对应解决方案
场景1:仅需要用最新镜像创建VM,不需要获取镜像元数据
直接在创建VM的命令中使用带latest的URN即可,无需提前调用Get-AzVMImage查询版本,示例代码:
$imageUrn = "Canonical:UbuntuServer:18.04-LTS:latest" # 其他VM配置参数省略 New-AzVM -ResourceGroupName <你的资源组名称> -Name <虚拟机名称> -Image $imageUrn
场景2:需要提前获取最新镜像的详细元数据
你当前设想的先查询全量版本、排序取最新的方案是标准可行方案,和官方文档说明并不冲突,只是适用场景不同,示例代码:
# 查询指定SKU下的所有镜像版本,按版本号降序排序取第一条即为最新版本 $allVersions = Get-AzVMImage -Location "eastus" -PublisherName "Canonical" -Offer "UbuntuServer" -Skus "18.04-LTS" | Sort-Object -Property Version -Descending $latestImage = $allVersions[0] # 可直接调用$latestImage的属性获取所需信息,如版本号、Hyper-V generation等 $latestVersion = $latestImage.Version
补充说明
你之前硬编码真实版本号可以正常返回结果,是因为符合Get-AzVMImage对-Version参数的格式要求,该逻辑和创建VM时使用latest占位符的逻辑相互独立,不存在冲突。
内容的提问来源于stack exchange,提问作者darlirium
相关产品推荐
相关产品推荐

