#azure #powershell #azure-resource-manager #azure-powershell
#azure #powershell #azure-resource-manager #azure-powershell
Вопрос:
Get-AzVM | Where-Object{$_.ResourceGroupName -eq "somename" -and $_.Tags.Keys -like "tagName*"} | ForEach-Object {
Write-Output($_.Name);
}
Проблема здесь в том, что у виртуальной машины нет доступного тега, тогда она выдает ошибку.
Вы не можете вызвать метод для выражения с нулевым значением.
Если есть только один тег, то в предложении where ТЕГ работает не с тегами.
Есть способ сначала проверить количество, а затем применить тег или теги соответствующим образом, но весь смысл получения только выборочных виртуальных машин заключается в повышении производительности моего кода, а не ухудшении его с помощью count и if else каждый раз.
Комментарии:
1. Да, вы можете просто сначала получить счетчик или список тегов. Тем не менее, вы пробовали сначала использовать -contains или -match .
2. Не могли бы вы попробовать использовать
$_.Tags.Keys -contains ""
?
Ответ №1:
Вы можете просто проверить, содержат ли ключи тегов tagName
то, что вы ищете.
Get-AzVM -ResourceGroupName <resource-group-name> | Where-Object { $_.Tags.Keys -contains "tagName" }
Это должно работать независимо от того, имеет ли ресурс виртуальной машины ни одного / одного / нескольких тегов.
Комментарии:
1. Это будет работать, только если у нас есть несколько тегов, если в случае, если у нас есть один тег или нет тега, в этом случае он не будет работать. потому что в этом случае $ _.Tag.keys работает.
2. @Amarjitsingchaudhary Нет, это не так. Я вижу правильные результаты с моей стороны, как показано на скриншоте выше. Пожалуйста, попробуйте включить скриншот, если он у вас не работает.
3. @Amarjitsingchaudhary Есть какая-нибудь удача здесь?