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

