Hace unos días compartí un script para Azure Automation que gestiona la parada y el arranque de máquinas virtuales. Mis últimas preocupaciones venían por este mismo proceso pero en paralelo, con el fin de no tener que esperar a que una máquina se parara o se iniciara para poder lanzar la orden a la siguiente. Ya te enseñé cómo hacerlo con aquellas máquinas creadas en el modelo clásico (ASM) y hoy me gustaría compartir contigo cómo hacer el mismo proceso con aquellas en el modelo ARM.
El script para este escenario sería el siguiente:
workflow Shutdown-Start-ARM-VMs-Parallel { Param( [Parameter(Mandatory=$true)] [String] $ResourceGroupName, [Parameter(Mandatory=$true)] [Boolean] $Shutdown ) #The name of the Automation Credential Asset this runbook will use to authenticate to Azure. $CredentialAssetName = "DefaultAzureCredential"; #Get the credential with the above name from the Automation Asset store $Cred = Get-AutomationPSCredential -Name $CredentialAssetName; if(!$Cred) { Throw "Could not find an Automation Credential Asset named '${CredentialAssetName}'. Make sure you have created one in this Automation Account." } #Connect to your Azure Account Add-AzureRmAccount -Credential $Cred; $vms = Get-AzureRmVM -ResourceGroupName $ResourceGroupName; Foreach -Parallel ($vm in $vms){ if($Shutdown){ Write-Output "Stopping $($vm.Name)"; Stop-AzureRmVm -Name $vm.Name -ResourceGroupName $ResourceGroupName -Force; } else{ Write-Output "Starting $($vm.Name)"; Start-AzureRmVm -Name $vm.Name -ResourceGroupName $ResourceGroupName; } } }
Como ves, en este caso se lanza un foreach con la opción -Parallel donde se lanza la acción por cada una de las máquinas dentro del resource group, lanzando todas las peticiones a la vez.

También puedes importar este script desde la galería.

¡Saludos!