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:
[powershell]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;
}
}
}[/powershell]
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!
