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

如何在PowerShell中按DateTime排序JSON并获取最新ACR标签

从Azure容器注册表(ACR)获取各仓库最新标签的PowerShell实现

问题分析

原代码尝试遍历ACR中的所有仓库,获取每个仓库的标签详情并按lastUpdateTime降序排序后取最新标签名,但存在几个明显问题:

  • 未将循环结果收集到变量中,执行完后无法获取所有仓库的最新标签数据
  • 直接对字符串类型的lastUpdateTime排序可能出现逻辑误差(不同格式的时间字符串排序准确性无法保证)
  • 定义的$latestTag变量未实际发挥作用

修正后的代码

$registryName = "abc"
# 用于存储每个仓库的最新标签信息
$latestTags = @()

az acr repository list -n $registryName | ConvertFrom-Json | ForEach-Object {
    $repoName = $_
    # 获取标签详情并转换为对象,将lastUpdateTime转为DateTime类型后降序排序
    $tagDetails = az acr repository show-tags -n $registryName --repository $repoName --detail | ConvertFrom-Json | 
        Sort-Object { [DateTime]$_.lastUpdateTime } -Descending
    
    if ($tagDetails) {
        $latestTag = $tagDetails[0].name
        # 把仓库名、最新标签名和更新时间存入结构化对象
        $latestTags += [PSCustomObject]@{
            RepositoryName = $repoName
            LatestTagName  = $latestTag
            LastUpdateTime = $tagDetails[0].lastUpdateTime
        }
    }
}

# 输出最终结果
$latestTags

代码说明

  • 用数组$latestTags统一收集结果,最终输出包含仓库名、对应最新标签名和更新时间的结构化数据,方便查看或后续处理
  • 排序时将lastUpdateTime转为DateTime类型,彻底避免字符串排序带来的准确性问题
  • 增加空值判断,防止仓库无标签时触发报错

返回数据示例

单个标签详情的对象结构如下(已格式化):

@{
    changeableAttributes = 
    createdTime          = 2023-05-21T19:54:21.7463638Z
    digest               = sha256:ec0bc571b2dbd7754ec4b7a2a95c4ef98b34b222e9711f4d547547194b833c88
    lastUpdateTime       = 2023-05-21T19:54:21.7463638Z
    name                 = v0.1
    quarantineState      = Passed
    signed               = False
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 21:05:19