Automation Compliance
⚙️ Configuración en Azure Automation
En esta sección se explica cómo ejecutar el script de automatización en Azure Automation, usando PowerShell 7.2 y una App Registration para autenticación segura en Microsoft Graph.
🧭 1. Crear o seleccionar una Automation Account
1️⃣ Inicia sesión en portal.azure.com
2️⃣ Busca Automation Accounts en la barra superior.
3️⃣ Crea una nueva cuenta o selecciona una existente.
🧩 2. Crear un Runbook
1️⃣ En el panel lateral, navega a Process Automation → Runbooks.
2️⃣ Haz clic en ➕ Create a Runbook.
3️⃣ Asigna un nombre descriptivo (por ejemplo, IntuneCompliance-Report).
4️⃣ En Runbook type, selecciona PowerShell 7.2.
5️⃣ Guarda y luego abre el nuevo Runbook para editarlo.
💻 3. Agregar el script
1️⃣ Haz clic en Edit.
2️⃣ Pega el contenido del script de PowerShell completo.
3️⃣ Asegúrate de modificar las variables de autenticación:
$TenantId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$ClientId = "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
$ClientSecret = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# Replace these values with your actual App Registration details and Teams webhook
$TenantId = "********************************"
$ClientId = "*******************************"
$ClientSecret = "**********************"
$WebhookUrl = "********************************************"
# Get token
$body = @{
client_id = $ClientId
scope = "https://graph.microsoft.com/.default"
client_secret = $ClientSecret
grant_type = "client_credentials"
}
$tokenResponse = Invoke-RestMethod -Uri "https://login.microsoftonline.com/$TenantId/oauth2/v2.0/token" -Method POST -Body $body -ContentType "application/x-www-form-urlencoded"
$accessToken = $tokenResponse.access_token
# Prepare Graph call
$headers = @{ Authorization = "Bearer $accessToken" }
$startDate = (Get-Date).AddDays(-7).ToString("yyyy-MM-ddTHH:mm:ssZ")
$uri = "https://graph.microsoft.com/beta/deviceManagement/auditEvents?`$filter=activityDateTime ge $startDate and category eq 'DeviceConfiguration'&`$orderby=activityDateTime desc"
$response = Invoke-RestMethod -Uri $uri -Headers $headers -Method Get
# Filter for ConfigurationPolicy changes
$policyChanges = $response.value | Where-Object { $_.activityType -like '*DeviceManagementConfigurationPolicy*' } | Select-Object -First 5
if ($policyChanges.Count -eq 0) {
$messageText = "No policy changes detected in the last 7 days."
} else {
$entries = $policyChanges | ForEach-Object {
$policy = $_.resources[0].displayName
$user = $_.actor.userPrincipalName
$type = $_.activityType
$date = Get-Date $_.activityDateTime -Format "yyyy-MM-dd HH:mm"
"- [$date] $type by $user on '$policy'"
}
$messageText = "**Intune Policy Change Audit**`nLast 7 days:`n`n" + ($entries -join "`n")
}
# Send to Teams
$payload = @{
"@type" = "MessageCard"
"@context" = "http://schema.org/extensions"
"summary" = "Policy Changes Audit"
"themeColor" = "FFAA00"
"title" = "Weekly Intune Policy Change Report"
"text" = $messageText
} | ConvertTo-Json -Depth 6
Invoke-RestMethod -Uri $WebhookUrl -Method POST -Body $payload -ContentType 'application/json'
🔐 4. Crear una App Registration
1️⃣ Ve a Microsoft Entra ID → App registrations → New registration.
2️⃣ Asigna un nombre (ej. Graph-Intune-Automation).
3️⃣ Copia el Tenant ID y el Client ID desde la pestaña Overview.
4️⃣ En Certificates & Secrets, crea un nuevo Client Secret y guarda su valor.
🧾 5. Otorgar permisos a la aplicación
1️⃣ Dentro de la App Registration, ve a API Permissions → Add a permission.
2️⃣ Selecciona Microsoft Graph → Application permissions.
3️⃣ Agrega los permisos necesarios, por ejemplo:
DeviceManagementManagedDevices.Read.All
DeviceManagementConfiguration.Read.All
DeviceManagementConfiguration.ReadWrite.All
4️⃣ Haz clic en Grant admin consent para aprobarlos.
🚀 6. Probar el Runbook
1️⃣ Regresa al Runbook y selecciona Publish → Yes.
2️⃣ Haz clic en Start para ejecutarlo manualmente.
3️⃣ Verifica que el mensaje se envíe correctamente al canal de Microsoft Teams configurado.

✅ Listo:
Tu automatización ahora ejecuta el script desde Azure, recopila métricas de cumplimiento desde Intune y envía alertas automáticas al canal de Teams configurado.