(+351) 21 24 10006  ·  info@bconcepts.pt
Carnaxide, Lisboa
PowerShell

Azure Automation Runbooks: programación y ejecución de PowerShell en la nube

João Barros 17 de December de 2025 1 min de lectura

Azure Automation es un servicio gestionado que ejecuta Runbooks de PowerShell (y Python) en la nube, sin necesidad de una VM dedicada. Ideal para tareas programadas de administración de Azure — detener recursos, limpieza, informes y remediación automática.

Crear una cuenta de Automation y un Runbook

# Vía PowerShell (o el portal)
New-AzAutomationAccount -Name "aa-bconcepts-ops" -ResourceGroupName "rg-ops" -Location "westeurope"

# Crear un Runbook de tipo PowerShell
New-AzAutomationRunbook -AutomationAccountName "aa-bconcepts-ops" `
    -ResourceGroupName "rg-ops" `
    -Name "RB_StopDevVMs" `
    -Type PowerShell

Runbook — apagado automático de VMs de dev

# Código del Runbook
param([string]$ResourceGroup = "rg-dev")

# Autenticación vía System-assigned Managed Identity
Connect-AzAccount -Identity

# Detener VMs con la etiqueta AutoStop = true
Get-AzVM -ResourceGroupName $ResourceGroup |
    Where-Object { $_.Tags["AutoStop"] -eq "true" } |
    ForEach-Object {
        $status = (Get-AzVM -Name $_.Name -ResourceGroupName $ResourceGroup -Status).Statuses |
                  Where-Object { $_.Code -like "PowerState/*" }
        if ($status.Code -eq "PowerState/running") {
            Write-Output "Deteniendo: $($_.Name)"
            Stop-AzVM -ResourceGroupName $ResourceGroup -Name $_.Name -Force
        }
    }

Variables y credenciales seguras

# En la Automation Account → Shared Resources → Variables
New-AzAutomationVariable -AutomationAccountName "aa-bconcepts-ops" `
    -ResourceGroupName "rg-ops" -Name "NotifyEmail" `
    -Value "ops@bconcepts.pt" -Encrypted $false

# En el Runbook, leer la variable:
$email = Get-AutomationVariable -Name "NotifyEmail"

Programar la ejecución

# Schedule diario a las 22:00 Lisboa (UTC+1 en verano)
$schedule = New-AzAutomationSchedule -AutomationAccountName "aa-bconcepts-ops" `
    -ResourceGroupName "rg-ops" -Name "NightlyStop" `
    -StartTime (Get-Date "22:00") -DayInterval 1 -TimeZone "GMT Standard Time"

Register-AzAutomationScheduledRunbook -AutomationAccountName "aa-bconcepts-ops" `
    -ResourceGroupName "rg-ops" -RunbookName "RB_StopDevVMs" `
    -ScheduleName "NightlyStop" -Parameters @{ ResourceGroup = "rg-dev" }

Conclusión

Azure Automation sustituye VMs dedicadas para tareas de mantenimiento recurrente. Con Managed Identity, no hay credenciales que gestionar; con variables cifradas, los secretos están seguros; con schedules, la automatización es fiable y auditable.

Compartir: