Un servicio de Azure que se usa para automatizar, configurar e instalar actualizaciones en entornos híbridos.
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.