Powershell 7: проблема с Where-Object и тегами

Я выполняю простой запрос PowerShell в Azure. Я хочу фильтровать только веб-приложения с определенным тегом, назначенным ему:

$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, все будет работать нормально.

Я не уверен, почему возникает эта ошибка и что это за два пустых массива, которые входят в набор результатов.

Кто-нибудь может пролить свет на это?

если у ресурса, к которому вы запрашиваете, не установлен какой-либо тег, имело бы смысл выдать эту ошибку. Измените фильтрацию на: Where-Object { $_.Tags -and $_.Tags["Application"] -match "any-tag-value"}

Santiago Squarzon 24.02.2024 00:10
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
2
1
138
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Скорее всего, первые два ресурса, перечисленные вашим командлетом, не имеют набора тегов, и ссылка на свойство, которое не установлено, будет null, а затем индексирование значения null вызывает исключение, которое вы видите:

([pscustomobject]@{ }).PropertyDoesNotExist['foo']

# Throws: InvalidOperation: Cannot index into a null array.

Самый простой обходной путь — использовать точечную нотацию и позволить перечислению членского доступа выполнять индексацию за вас, таким образом:

$apps = Get-AzWebApp | Where-Object { $_.Tags.Application -match "any-tag-value" }

Или вы можете сначала проверить, существует ли такое свойство, а затем попытаться его проиндексировать:

$apps = Get-AzWebApp | Where-Object { $_.Tags -and $_.Tags['Application'] -match "any-tag-value" }

Другие вопросы по теме