Внутри цикла 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"
и т. Д.
Надеюсь, что это объяснит ваш объект в строку преобразования вещь.