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

如何用PowerShell将三段VM镜像版本号转为两段并提取最高版本

解决方案

以下是修改后的PowerShell脚本,可实现提取两段式版本号、去重排序、跳过02相关版本并获取最高版本的需求:

$imagegallery = Get-AzGallery -ResourceGroupName rg-shared-inva-eastus
Write-Output $imagegallery.Name

$imagegallerydefinitioninfo = @("PeriscopeMQ","PeriscopeApp","PeriscopeWeb")

# 收集并预处理所有版本号
$twoPartVersions = foreach ($imagedefinition in $imagegallerydefinitioninfo) {
    $imagegalleryimageversion = Get-AzGalleryImageVersion -GalleryName $imagegallery.Name -ResourceGroupName $imagegallery.ResourceGroupName -GalleryImageDefinitionName $imagedefinition
    
    $imagegalleryimageversion.Tags.PeriscopeVmImageVersion | 
        # 跳过包含02的版本(若仅需排除第三部分为02的版本,可改为 $_ -notmatch '\.02$')
        Where-Object { $_ -notmatch '02' } |
        # 提取版本号前两段,删除第三部分
        ForEach-Object { $_ -replace '^(\d+\.\d+)\.\d+$', '$1' }
}

# 去重并按版本号降序排序
$sortedUniqueVersions = $twoPartVersions | Select-Object -Unique | Sort-Object -Descending { [version]$_ }

# 输出整理后的两段式版本列表
Write-Output "整理后的两段式版本号:"
$sortedUniqueVersions

# 获取并输出最高版本
$highestVersion = $sortedUniqueVersions[0]
Write-Output "`n最高版本:$highestVersion"

关键逻辑说明

  • 提取两段式版本:通过正则表达式^(\d+\.\d+)\.\d+$匹配三段式版本号,捕获前两位版本段并替换,自动去除第三部分。
  • 过滤02相关版本:使用Where-Object筛选掉包含"02"的版本号,若你的需求是仅排除第三部分为02的版本,可将条件改为$_ -notmatch '\.02$'。
  • 可靠排序:将版本号转换为[version]类型进行排序,避免字符串排序可能导致的错误(比如确保5.10排在5.9之前)。
  • 去重与最高版本获取:Select-Object -Unique去除重复的两段式版本,排序后的第一个元素即为最高版本。

运行上述脚本后,你会得到如下输出:

整理后的两段式版本号:
5.11
5.10
5.9
5.8

最高版本:5.11

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 23:20:36