Intune Policy Change Monitor
🎯 Objetivo
Automatizar la recolección y notificación de cambios en políticas de Intune mediante un Runbook de Azure Automation, autenticado de forma segura con Microsoft Entra ID (App Registration) y conectado a un canal de Microsoft Teams para recibir reportes semanales.
⚙️ 1. Configuración en Azure Automation
🧭 Crear o seleccionar una Automation Account
1️⃣ Ingresa a portal.azure.com.
2️⃣ Busca Automation Accounts.
3️⃣ Crea una nueva cuenta o selecciona una existente.
4️⃣ Verifica que tenga el Runtime PowerShell 7.2 habilitado.
🧩 2. Crear un Runbook
1️⃣ Dentro del Automation Account, navega a
👉 Process Automation → Runbooks.
2️⃣ Haz clic en + Create a Runbook.
3️⃣ Asigna un nombre, por ejemplo:
IntunePolicyChange-Report
4️⃣ Selecciona el tipo PowerShell 7.2.
5️⃣ Guarda y luego abre el Runbook para editarlo.
💻 3. Agregar el script PowerShell
Pega tu script completo en el editor del Runbook:
# 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'
💡 Asegúrate de reemplazar las variables TenantId, ClientId, ClientSecret y WebhookUrl con los valores de tu App Registration y tu canal de Teams.
🔐 4. Crear la App Registration en Microsoft Entra ID
1️⃣ Ve a Microsoft Entra ID → App registrations → + New registration.
2️⃣ Asigna un nombre (ej. Graph-Intune-Automation).
3️⃣ Copia los valores de:
- Tenant ID
- Client ID
4️⃣ Crea un Client Secret desde Certificates & Secrets y guárdalo (solo se muestra una vez).
🧾 5. Otorgar permisos en Microsoft Graph
Dentro de la misma App Registration:
1️⃣ Abre API Permissions → Add a permission.
2️⃣ Selecciona Microsoft Graph → Application permissions.
3️⃣ Agrega los siguientes permisos:
DeviceManagementManagedDevices.Read.All
DeviceManagementConfiguration.Read.All
DeviceManagementConfiguration.ReadWrite.All
4️⃣ Haz clic en Grant admin consent para aprobarlos globalmente.
🚀 6. Publicar y probar el Runbook
1️⃣ Regresa al Runbook.
2️⃣ Haz clic en Publish → Yes.
3️⃣ Luego selecciona Start para ejecutarlo manualmente.
En unos segundos, deberías recibir en tu canal de Teams un mensaje con el resumen de los últimos cambios detectados en políticas de Intune.
📊 Resultado esperado
📥 El Runbook:
- Autentica con Microsoft Graph mediante
client_credentials. - Consulta los auditEvents del endpoint
/deviceManagement/auditEvents. - Filtra los cambios recientes en políticas de configuración (
DeviceManagementConfigurationPolicy). - Envía un MessageCard JSON a Microsoft Teams con los detalles de usuario, política, fecha y tipo de cambio.
📤 Ejemplo de mensaje en Teams:

🔁 Automatización recurrente (opcional)
Puedes programar el Runbook para ejecutarse automáticamente cada semana:
1️⃣ En el Runbook, ve a Schedules → + Add a schedule.
2️⃣ Crea una nueva con frecuencia Every 7 days.
3️⃣ Vincúlala al Runbook.
✅ A partir de ahora, tus reportes de cambios en Intune llegarán de forma periódica sin intervención manual.
🧩 Conclusión
Esta integración combina Azure Automation + Graph API + Microsoft Teams para implementar un flujo completamente automatizado de auditoría de configuraciones Intune.
Ideal para equipos de seguridad, cumplimiento o administradores de endpoints que necesiten monitorear cambios sin depender de reportes manuales.