Get-AzVMImage未输出PSVirtualMachineImageDetail,如何获取VM镜像详情?
如何通过PowerShell获取Azure VM镜像的详细信息(含Name和OSDiskImage)
问题背景
执行以下PowerShell脚本尝试获取Azure VM镜像的详细信息,但仅返回PSVirtualMachineImage类型结果,无法拿到Name和OSDiskImage等核心详细字段:
$location = "swedencentral" $publisher = "MicrosoftSQLServer" #Get all offers for selected publisher $Alloffers = @(Get-AzVMImageOffer -Location $location -PublisherName $publisher | Select-Object -ExpandProperty Offer) #Get all images for all skus of all ofers for the selected publisher foreach ($Offer in $Alloffers) { $Allskus = (Get-AzVMImageSku -Location $location -PublisherName $publisher -Offer $offer | Select-Object -ExpandProperty Skus) foreach ($sku in $Allskus) { $images += @(Get-AzVMImage -Location $location -PublisherName $publisher -Offer $offer -Skus $sku -Version latest) } } $images
根据官方文档定义,Get-AzVMImage应支持返回PSVirtualMachineImageDetail类型结果,但实际未获取到该类型的完整数据。
原因分析
使用-Version latest参数时,Get-AzVMImage默认返回精简的PSVirtualMachineImage对象,仅包含基础元数据;只有传入具体的版本号时,才会返回完整的PSVirtualMachineImageDetail对象,包含Name、OSDiskImage等详细字段。
解决方案
修改脚本,先获取对应SKU下的最新版本号,再用该版本号调用Get-AzVMImage获取完整详细信息:
$location = "swedencentral" $publisher = "MicrosoftSQLServer" $images = @() # 获取目标发布商下的所有Offer $Alloffers = Get-AzVMImageOffer -Location $location -PublisherName $publisher | Select-Object -ExpandProperty Offer foreach ($Offer in $Alloffers) { # 获取当前Offer下的所有SKU $Allskus = Get-AzVMImageSku -Location $location -PublisherName $publisher -Offer $offer | Select-Object -ExpandProperty Skus foreach ($sku in $Allskus) { # 获取该SKU下的所有版本,排序后取最新的版本号 $latestVersion = Get-AzVMImage -Location $location -PublisherName $publisher -Offer $offer -Skus $sku | Sort-Object Version -Descending | Select-Object -First 1 -ExpandProperty Version # 使用具体版本号获取完整的镜像详细信息 $imageDetail = Get-AzVMImage -Location $location -PublisherName $publisher -Offer $offer -Skus $sku -Version $latestVersion $images += $imageDetail } } # 筛选输出需要的核心字段 $images | Select-Object Name, OSDiskImage, PublisherName, Offer, Skus, Version
关键说明
- 通过先获取所有版本并按版本号降序排序,拿到最新版本的字符串,再传入
Get-AzVMImage,即可触发返回PSVirtualMachineImageDetail类型的完整对象。 OSDiskImage字段包含镜像的操作系统磁盘核心信息(如存储账户类型、磁盘大小等),Name字段对应镜像的唯一标识字符串。
内容的提问来源于stack exchange,提问作者Daniel Björk
相关产品推荐
相关产品推荐

