基于PowerShell提取AKS镜像特定标签并实现分组聚合
问题
需要通过PowerShell命令对给定的AKS镜像列表完成以下操作:
- 提取指定名称的镜像标签(如ip-id、ip-license),过滤无关镜像
- 将标签名称与对应版本号整理为同行显示
- 对重复标签分组,将同一标签的所有版本号聚合为逗号分隔的字符串,输出指定格式
给定镜像列表:
testcontainersgw.azurecr.io/reloader:v1.0.51 testcontainersgw.azurecr.io/tef/ip-id:19900909.1 testcontainersgw.azurecr.io/tef/ip-license:19900909.1 testcontainersgw.azurecr.io/tef/ip-finalsync:19900906.2 testcontainersgw.azurecr.io/tef/ip-tubelas:19900909.1 mcr.microsoft.com/aks/ip-masq-agent-v2:v0.1.11 mcr.microsoft.com/oss/kubernetes/kube-proxy:v1.30.3
多组标签输入示例:
ip-id 19900909.1 ip-license 19900906.2 ip-id 19900809.1 ...
期望输出格式:
ip-id = "19900909.1","19900809.1", "19900509.1" ip-license = "19900906.2", "19900905.2", "19900406.2" ...
解决方案
以下PowerShell命令可完成需求:
# 定义需要保留的目标标签 $targetTags = @("ip-id", "ip-license") # 读取并处理镜像列表,完成过滤、分组与格式输出 Get-Content -Path "镜像列表文件路径.txt" | ForEach-Object { # 用正则匹配提取标签和版本号 if ($_ -match '\/(?<tag>ip-[^\/:]+):(?<version>.+)$') { $tag = $matches.tag $version = $matches.version # 仅保留目标标签条目 if ($targetTags -contains $tag) { [PSCustomObject]@{ Tag = $tag Version = $version } } } } | Group-Object -Property Tag | ForEach-Object { # 将版本号格式化为带引号的字符串,用逗号分隔 $versions = $_.Group.Version | ForEach-Object { "`"$_`"" } -Join ", " # 输出指定格式内容 "$($_.Name) = $versions" }
命令说明
- 过滤目标标签:通过正则表达式匹配镜像地址中
ip-开头的标签,仅保留$targetTags定义的标签类型 - 整理条目结构:将匹配到的标签与版本封装为自定义对象,为后续分组操作提供数据基础
- 分组聚合输出:按标签名称分组后,将同一标签的所有版本号拼接为带引号、逗号分隔的字符串,输出符合要求的格式
针对给定镜像列表的输出结果
ip-id = "19900909.1" ip-license = "19900909.1"
若输入包含重复标签(如示例中的多组ip-id),命令会自动聚合对应版本号,生成符合期望格式的内容。
内容的提问来源于stack exchange,提问作者Saikumar
相关产品推荐
相关产品推荐

