Назначить тег всем виртуальным машинам одновременно - PullRequest
1 голос
/ 01 апреля 2019

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

Я уже подготовил сценарий, но PS не хочет продолжать это из-за преобразования объекта в строкуthingy.

$VMs = Get-AzureRmVM

$VMs | Foreach-Object {
$t = Get-AzureRmResource -ResourceName $VMs.Name -ResourceGroupName $VMs.ResourceGroupName
Set-AzureRmResource -Tag @{ Funding="..."} -ResourceId $t.ResourceId -Force
}

Но как я могу делать циклы, когда он запрашивает строку, когда объекты, анализируемые в цикле, должны быть явно объектными?Я вынужден подготовить внешний список в текстовом файле и проанализировать значения оттуда как строки?

1 Ответ

1 голос
/ 01 апреля 2019

Внутри цикла ForEach-Object вы должны использовать автоматическую переменную $_ для нацеливания на этот конкретный объект. Теперь вы отправляете массивы в командлет Get-AzureRmResource:

$VMs = Get-AzureRmVM

$VMs | Foreach-Object {
    $t = Get-AzureRmResource -ResourceName $_.Name -ResourceGroupName $_.ResourceGroupName
    Set-AzureRmResource -Tag @{ Funding="..."} -ResourceId $t.ResourceId -Force
}

Предположим, у вас есть три виртуальные машины, от которых вы получаете $VMs = Get-AzureRmVM
(Я подделал это, используя массив объектов [PSCustomObject])

$VMs = @(
    [PSCustomObject]@{Name = 'VM1'; ResourceGroupName = 'VM1_Resource'},
    [PSCustomObject]@{Name = 'VM2'; ResourceGroupName = 'VM2_Resource'}
    [PSCustomObject]@{Name = 'VM3'; ResourceGroupName = 'VM3_Resource'}
)

Затем выполнение $VMs.Name приводит к (Object []) array 'VM1','VM2','VM3'

и выполнение $VMs.ResourceGroupName приводит к массиву 'VM1_Resource','VM2_Resource','VM3_Resource'

Однако внутри цикла переменная $_ представляет только одну из этих ВМ по очереди, поэтому для первой итерации $_.Name представляет собой строку "VM1" и т. Д.

Надеюсь, что это объяснит ваш объект в строку преобразования вещь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...