Como crear un runbook para la ejecución de un script de PowerShell

Robinson Estiven Velasquez Sanchez 0 Puntos de reputación
2026-03-25T22:54:44.04+00:00

Buenas tardes, actualmente esto iniciando en el tema de creación de runbook desde Azure Automatización, pero no habían manejado antes la herramienta, lo que necesito es implementar un script de PowerShell, el cual mediante conexión por Grant se conecte a mi tenant de Azure Entra y deshabilite o habilite usuarios, esto tomando como origen un archivo de excel donde están los datos como correo, nombre, fecha de bloqueo, fecha de desbloqueo, la idea es que el script de manera diaria, se ejecute, busque en el archivo de excel y según fecha deshabilite o habilite usuarios, la ejecución solo se debería hacer 2 veces al día, una a las 7 am para habilitar usuarios y otra a las 10 pm para deshabilitar, yo ya cree un runbook inicial, pero no me está funcionando, creo que no se ha configurado de manera correcta la programación de ejecución, por lo cual si alguien me puede guiar en este proceso, se lo agradeceria.

Azure Automation
Azure Automation

Un servicio de Azure que se usa para automatizar, configurar e instalar actualizaciones en entornos híbridos.

0 comentarios No hay comentarios

1 respuesta

Ordenar por: Lo más útil
  1. Suchitra Suregaunkar 16,780 Puntos de reputación Personal externo de Microsoft Moderador
    2026-03-26T01:49:52.29+00:00

    Hello @Robinson Estiven Velasquez Sanchez

    Se requiere un runbook de PowerShell para Azure Automation con las siguientes especificaciones: debe ejecutarse automáticamente según un horario preestablecido, realizándose dos veces al día: a las 07:00 AM para habilitar usuarios y a las 10:00 PM para deshabilitarlos. El runbook debe conectarse de forma segura a Microsoft Entra ID, leer un archivo de Excel que contenga las columnas Correo electrónico, Nombre, Fecha de bloqueo y Fecha de desbloqueo, y habilitar o deshabilitar a los usuarios en función de la fecha actual.

    Tenga en cuenta que Azure Automation no admite lógica condicional dentro de un mismo horario programado. Esto significa que no es posible tener un runbook que modifique su comportamiento según la hora del día dentro de una única programación. Cada hora de ejecución debe configurarse como un horario independiente. Si bien un runbook puede vincularse a múltiples horarios, cada horario define únicamente una hora de inicio.

    Por favor, consulte la siguiente solución alternativa:

    1. Debe crear DOS programaciones:

    Programación 1 – Habilitar usuarios

    Tipo: Recurrente

    Frecuencia: Diaria

    Hora de inicio: 07:00 AM (zona horaria local)

    • Vinculada al mismo runbook

    Pasar parámetro: -Mode Enable

    Programación 2 – Deshabilitar usuarios

    Tipo: Recurrente

    Frecuencia: Diaria

    Hora de inicio: 10:00 PM

    Vinculada al mismo runbook

    Pasar parámetro: -Mode Disable

    Azure Automation admite plenamente múltiples programaciones por runbook.

    2. Diseño de parámetros del runbook (Obligatorio)

    Su runbook debe aceptar un parámetro de modo:

    param (
        [Parameter(Mandatory)]
        [ValidateSet("Enable","Disable")]
        [string]$Mode
    )
    
    

    Esto permite reutilizar el mismo script de forma segura.

    3. Los runbooks deben utilizar una identidad administrada, no credenciales almacenadas.

    Dentro del runbook, ejecute el siguiente comando:

    Connect-MgGraph -Identity
    

    Este es el único método no interactivo admitido de ahora en adelante.

    Las cuentas de ejecución (Run As) están en desuso.

    4. Permisos requeridos (muy importante):

    La identidad administrada de su cuenta de automatización debe contar con:

    • Permisos de aplicación de Microsoft Graph

    User.ReadWrite.All

    
    - Consentimiento de administrador otorgado
    
    Sin esto, las operaciones de habilitación y deshabilitación fallarán silenciosamente.
    
    **5. Gestión de archivos Excel (Patrón admitido)**
    
    Azure Automation no puede leer archivos Excel locales.
    
    Almacene el archivo Excel en Azure Blob Storage.
    
    Convierta el archivo Excel a CSV antes de cargarlo y descárguelo dentro del runbook utilizando  `Get-AzStorageBlobContent`
    
    Este es el patrón admitido para los runbooks de automatización.
    
    **6. Lógica central (Decisión basada en fechas)**
    
    Ejemplo de lógica dentro del *runbook*:
    
    ```dockerfile
    $today = (Get-Date).Date
    foreach ($user in $users) {
        if ($Mode -eq "Disable" -and $user.BlockDate -eq $today) {
            Update-MgUser -UserId $user.Email -AccountEnabled:$false
        }
        if ($Mode -eq "Enable" -and $user.UnlockDate -eq $today) {
            Update-MgUser -UserId $user.Email -AccountEnabled:$true
        }
    }
    

    Esto mantiene la lógica sencilla y predecible.

    El problema no reside en la lógica de PowerShell, sino en la programación. Azure Automation no admite tiempos de ejecución condicionales dentro de una misma programación. Para cumplir con este requisito, debe crear dos programaciones recurrentes independientes (07:00 AM y 10:00 PM) y vincular ambas al mismo runbook, pasando un parámetro de modo (Enable/Disable). El runbook debe autenticarse mediante una identidad administrada y utilizar Microsoft Graph para habilitar o deshabilitar usuarios basándose en las fechas leídas de un archivo de Excel (CSV) almacenado en Azure Blob Storage.

    Gracias,

    Suchitra.

    ¿Le resultó útil esta respuesta?


Su respuesta

Las respuestas pueden ser marcadas como Respuestas aceptadas por el autor de la pregunta, lo que indica a los usuarios que la respuesta resolvió su problema.