从RG获取具有特定标记值的Vm并更新vm标记

时间:2018-01-19 12:16:32

标签: powershell azure

我正在尝试检查已设置为true的RG中的标记,然后对于RG中的那些资源(vms)(当前设置为$ False)将其设置为true。我有一个更新脚本<​​/ p>

尝试编写一个IF语句,它将拉出所有设置为true的标记,然后循环遍历vms并将它们上的标记设置为$ true,位置停留在循环上,if($ OverRide -eq $ true) ){        Get-AzureRmVM ..就我所知道的那样:)

$x = Get-AzureRmVm -name "ThisVM" -ResourceGroupName "ThisRG"
$tags = $x.Tags
$tags['Shutdown'] = "$True"
$UpdateTag = Set-AzureRmResource -Tag $tags $x

但是我如何从RG获取vms并将override设置为true,然后遍历每个vm并将其设置为false。

尝试编写一个IF语句,它将拉出所有设置为true的标记然后循环通过vms并将它们上的标记设置为$ true,位置停留在循环上,

if($OverRide -eq $true) {
        Get-AzureRmVm -ResourceGroupname | Where-Object { $_.Tags['ShutdownSchedule'] -eq $false } |`
         ForEach-Object { $tags = $_.Tags; $tags['ShutdownSchedule'] = $true; `
         $_ | Set-AzureRmResource -Tag $tags } 

希望更有意义

更新..

类似的东西,让所有RG与This-RG相似并获取RG名称,然后将其传递到循环中捕获所有vm的

$resourcegroup = get-AzureRmResourceGroup | where -FilterScript {
   $_.ResourceGroupName -like "This-RG*"
   }

$rgname = $resourcegroup | select resourcegroupname

Get-AzureRmVm | foreach ($rgname in $rgnames) 
{ 
Where-Object { $_.Tags['Shutdown'] -eq $false } | ForEach-Object`
{ $tags = $_.Tags; $tags['Shutdown'] = $true; $_ | Set-AzureRmResource -Tag $tags }
}

1 个答案:

答案 0 :(得分:1)

$resourceGroups = Get-AzureRmResourceGroups | Where-Object { $_.Tags['Shutdown'] -eq $false -and $_.Name -like 'This-RG*' }

$resourceGroups.ForEach({
    $vms = Get-AzureRmVm -resourceGroup $_.Name
    $vms.ForEach({
        $tags = $_.Tags
        $tags['Shutdown'] = $true;
        Set-AzureRmResource -ResourceId $_.Id -Tag $tags
    })
})

这会找到标记为shutdown的所有资源组等于false,并将这些组内所有vms上的shutdown标记更改为true