Si, la verdad es que he estado unos días preparando varios scripts para Azure Automation y no quiero pasar la oportunidad de compartilos contigo. Ayer publiqué uno que te permite eliminar todos aquellos resource groups que están vacíos, hoy he publicado uno con el que puedes apagar/encender todas las máquinas virtuales, ARM y ASM, pasándo como parámetro el nombre de un resource group.
Por si no lo sabías, dentro de un resource group es posible tener máquinas tanto ARM como ASM y la forma de tratarlas es diferente, en cuanto a los comandos de PowerShell a utilizar.

Para solventar este escenario he creado el siguiente script:
workflow Shutdown-Start-VMs-By-Resource-Group { Param ( [Parameter(Mandatory=$true)] [String] $AzureResourceGroup, [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 Add-AzureAccount -Credential $Cred if($Shutdown -eq $true){ Write-Output "Stopping VMs in '$($AzureResourceGroup)' resource group"; } else{ Write-Output "Starting VMs in '$($AzureResourceGroup)' resource group"; } #ARM VMs Write-Output "ARM VMs:"; Get-AzureRmVM -ResourceGroupName $AzureResourceGroup | ForEach-Object { if($Shutdown -eq $true){ Write-Output "Stopping '$($_.Name)' ..."; Stop-AzureRmVM -ResourceGroupName $AzureResourceGroup -Name $_.Name -Force; } else{ Write-Output "Starting '$($_.Name)' ..."; Start-AzureRmVM -ResourceGroupName $AzureResourceGroup -Name $_.Name; } }; #ASM VMs Write-Output "ASM VMs:"; Get-AzureRmResource | where { $_.ResourceGroupName -match $AzureResourceGroup -and $_.ResourceType -eq "Microsoft.ClassicCompute/VirtualMachines"} | ForEach-Object { $vmName = $_.Name; if($Shutdown -eq $true){ Get-AzureVM | where {$_.Name -eq $vmName} | ForEach-Object { Write-Output "The machine '$($_.Name)' is $($_.PowerState)"; if($_.PowerState -eq "Started"){ Write-Output "Stopping '$($_.Name)' ..."; Stop-AzureVM -ServiceName $_.ServiceName -Name $_.Name -Force; } } } else{ Get-AzureVM | where {$_.Name -eq $vmName} | ForEach-Object { Write-Output "The machine '$($_.Name)' is $($_.PowerState)"; if($_.PowerState -eq "Stopped"){ Write-Output "Starting '$($_.Name)' ..."; Start-AzureVM -ServiceName $_.ServiceName -Name $_.Name; } } } }; }
Para poder lanzar este script es necesario importar la última versión del módulo AzureResourceManager como se explica en este post.
En el caso de las máquinas ARM deberás utilizar el comando Stop-AzureRmVM y Start-AzureRmVM y para las máquinas creadas en el modelo clásico (ASM) se manejan con los comandos Stop-AzureVM y Start-AzureVM. Como puedes ver en la siguiente imagen, en el lado izquierdo puedes indicar el resource group y true o false en el parámetro Shudown, para iniciar o apagar las máquinas. En el caso de true se pararán las máquinas dentro del resource group.

Si seleccionas false hará que tanto las máquinas ASM como ARM se arranquen.

Por último puedes crear dos programaciones diferentes, una para el encendido y otra para el apagado de las máquinas, a través del apartado Schedules dentro del runbook, modificando a true o false el valor del parámetro $Shutdown y la hora de inicio de cada programación.

Si prefieres no tener que crear el script desde cero, al igual que el anterior, lo he publicado en la galería para que esté disponible para todo el mundo.
¡Saludos!