powershell脚本中变量的长度

Length of a variable in powershell script

我正在编写一个脚本来列出 ACR 中存储库的标签。代码是这样的:

$RepoList = az acr repository list --name $AzureRegistryName --output tsv
Write-Host "Repos: " $RepoList.length

foreach ($RepositoryName in $RepoList) {
    Write-Host "Get all tags in repository: " $RepositoryName
    $RepositoryTags = az acr repository show-tags --name $AzureRegistryName --repository $RepositoryName --orderby time_desc --output tsv
    Write-Host "Tags: " $RepositoryTags.length
  }

$RepositoryTags.length返回正确的长度,即大部分时间的标签总数。

但是当仓库中只有一个标签时,长度不等于实际存在的标签数量。

为什么会这样?如何解决?

我尝试打印变量类型:

$RepoList.getType()
$RepositoryTags.getType()

我注意到当存储库有多个可用标签时,类型为:

$RepositoryTags.getType()  

IsPublic   IsSerial     Name          BaseType                                                    
--------   --------     ----          --------  
True       True         Object[]      System.Array

只有一个标签时,类型为:

$RepositoryTags.getType() 

IsPublic   IsSerial     Name          BaseType                                                    
--------   --------     ----          --------  
True       True         String        System.Object

这意味着,在第二种情况下,$RepositoryTags.length returns 字符串的长度(那个标签的)。显然,这将不等于该存储库可用的标签数。

要解决此问题,请使用数组子表达式运算符 @( ... ) 将结果放入数组。将行更改为:

$RepoList = @(az acr repository list --name $AzureRegistryName --output tsv)

$RepositoryTags = @(az acr repository show-tags --name $AzureRegistryName --repository $RepositoryName --orderby time_desc --output tsv)

现在即使标签数量为1,结果也会被视为数组而不是字符串。