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,结果也会被视为数组而不是字符串。
我正在编写一个脚本来列出 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,结果也会被视为数组而不是字符串。