Powershell 7:Where-Object 和标签的问题

问题描述 投票:0回答:1

我正在 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 子句,一切都会正常工作。

我不确定为什么会发生此错误以及进入结果集中的这两个空数组是什么。

任何人都可以阐明这一点吗?

powershell azure-powershell powershell-7
1个回答
0
投票

您的 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" }
© www.soinside.com 2019 - 2024. All rights reserved.