При циклическом просмотре виртуальных машин Azure в powershell я хочу получать только виртуальные машины, у которых есть определенный тег, доступный в них

#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 Есть какая-нибудь удача здесь?