Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/powershell/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Powershell 使用特定标记值从RG获取Vm并更新Vm标记_Powershell_Azure - Fatal编程技术网

Powershell 使用特定标记值从RG获取Vm并更新Vm标记

Powershell 使用特定标记值从RG获取Vm并更新Vm标记,powershell,azure,Powershell,Azure,我试图做的是检查一个RG中的标记,该标记已设置为true,然后对于RG中当前设置为$False的资源VM,将其设置为true。我有一个更新脚本 尝试编写一个IF语句,它将拉出所有设置为true的标记,然后在vm中循环,并将它们上的标记设置为$true,在循环中有点卡住,IF$OverRide-eq$true{ 获取AzureRmVM..这就是我所能得到的: $x = Get-AzureRmVm -name "ThisVM" -ResourceGroupName "ThisRG" $tags =

我试图做的是检查一个RG中的标记,该标记已设置为true,然后对于RG中当前设置为$False的资源VM,将其设置为true。我有一个更新脚本

尝试编写一个IF语句,它将拉出所有设置为true的标记,然后在vm中循环,并将它们上的标记设置为$true,在循环中有点卡住,IF$OverRide-eq$true{ 获取AzureRmVM..这就是我所能得到的:

$x = Get-AzureRmVm -name "ThisVM" -ResourceGroupName "ThisRG"
$tags = $x.Tags
$tags['Shutdown'] = "$True"
$UpdateTag = Set-AzureRmResource -Tag $tags $x
但是,我如何从RG获取覆盖设置为true的vm,然后通过每个vm循环将其设置为false

尝试编写一个IF语句,它将拉出所有设置为true的标记,然后在vm中循环,并将它们上的标记设置为$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的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 }
}

这将发现标记shutdown等于false的所有资源组,并将这些组中所有VM上的shutdown标记更改为true

谢谢,标记是一个难题。我发现这个错误无法索引到空数组中。在第1行char:61+…ResourceGroup | Where Object{$\标记['ShutdownSchedule\u AllowStop']+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~;
$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
    })
})