代码之家  ›  专栏  ›  技术社区  ›  Herald Gjura

Powershell 7:Where对象和标记的问题

  •  1
  • Herald Gjura  · 技术社区  · 1 年前

    我正在Azure中运行一个简单的powershell查询。我只想筛选分配了特定标签的Web应用程序:

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

    我不知道为什么会出现这个错误,也不知道结果集中的这两个空数组是什么。

    有人能揭示这一点吗?

    1 回复  |  直到 1 年前
        1
  •  0
  •   Santiago Squarzon    1 年前

    cmdlet列出的前2个资源很可能没有标记集,并且引用未设置的属性时 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" }