我正在 Azure 中运行一个简单的 powershell 查询。我希望仅过滤分配有特定标签的网络应用程序:
$apps = Get-AzWebApp | Where-Object {$_.Tags["Application"] -match "any-tag-value"}
if ($apps) {
foreach ($app in $apps) {
Write-Host $app.Name
}
}
无论如何,无论是否找到任何东西,前两个结果始终是
InvalidOperation: Cannot index into a null array.
。之后它会列出找到的内容。
如果我删除Where-Object 子句,一切都会正常工作。
我不确定为什么会发生此错误以及进入结果集中的这两个空数组是什么。
任何人都可以阐明这一点吗?
您的 cmdlet 列出的前 2 个资源很可能没有设置标签,引用未设置的属性将是
null
,然后索引 null
值会导致您看到的异常:
([pscustomobject]@{ }).PropertyDoesNotExist['foo']
# Throws: InvalidOperation: Cannot index into a null array.
最简单的解决方法是通过点表示法,并让 member-access enumeration 为您处理索引,这样:
$apps = Get-AzWebApp | Where-Object { $_.Tags.Application -match "any-tag-value" }
或者,您可以先检查此类属性是否存在,然后尝试对其进行索引:
$apps = Get-AzWebApp | Where-Object { $_.Tags -and $_.Tags['Application'] -match "any-tag-value" }