Estado de la auditoría unificada
Te dice si Microsoft 365 está registrando la actividad de tu tenant. Si está apagada, cuando necesites investigar algo no habrá registros nuevos.
Ejemplo en México
Despacho contable en Guadalajara, 35 personas
Contrataron Microsoft 365 Business Premium hace dos años y nadie revisó la auditoría. Antes del cierre fiscal quieren saber si podrían investigar un incidente.
.\get-estado-auditoria.ps1 -RutaCsv .\estado-auditoria.csvObtienen un CSV con el estado y la acción a seguir. Si está activa, lo archivan: te ayuda a documentar tus medidas de seguridad frente a la LFPDPPP.
Cómo implementarlo
- Instala el módulo si no lo tienes: Install-Module ExchangeOnlineManagement -Scope CurrentUser.
- Ejecuta el script con -RutaCsv e inicia sesión con una cuenta que tenga el rol indicado.
- Revisa la columna Estado: Activa o Inactiva.
- Si sale Inactiva, actívala en el portal de Microsoft Purview, en Auditoría, y guarda el CSV como evidencia de la revisión.
Ver el código completo de get-estado-auditoria.ps1
<#
.SYNOPSIS
Responde si la auditoría unificada de Microsoft 365 está activa en tu tenant.
.DESCRIPTION
Lee UnifiedAuditLogIngestionEnabled con Get-AdminAuditLogConfig en Exchange Online PowerShell.
Si está inactiva, no se registra actividad nueva y las búsquedas de auditoría no devuelven nada.
Solo lectura: no cambia nada en el tenant.
.PARAMETER RutaCsv
Ruta del CSV de salida. Si se omite, solo se muestra en pantalla.
.EXAMPLE
.\get-estado-auditoria.ps1 -RutaCsv .\estado-auditoria.csv
.NOTES
Permisos: ninguno de Graph; usa ExchangeOnlineManagement.
Rol mínimo: Audit Logs o View-Only Audit Logs en Exchange Online (incluidos en Compliance Management y Organization Management).
Licencia: Microsoft Purview Audit (Standard), incluido en suscripciones de Microsoft 365 y Office 365 que admiten el registro de auditoría unificado.
Licencia del código: MIT. Se entrega TAL CUAL, sin garantía. Pruébalo primero en un tenant de pruebas.
#>
[CmdletBinding()]
param(
[string]$RutaCsv
)
$ErrorActionPreference = 'Stop'
if (-not (Get-Command Connect-ExchangeOnline -ErrorAction SilentlyContinue)) {
throw 'Falta el módulo. Instálalo con: Install-Module ExchangeOnlineManagement -Scope CurrentUser'
}
# Con una sesión previa de Connect-IPPSSession el valor puede salir siempre False, aunque la auditoría esté activa.
Disconnect-ExchangeOnline -Confirm:$false -ErrorAction SilentlyContinue
Connect-ExchangeOnline -ShowBanner:$false
try {
$config = Get-AdminAuditLogConfig
} finally {
Disconnect-ExchangeOnline -Confirm:$false
}
$activa = $config.UnifiedAuditLogIngestionEnabled -eq $true
$fila = [pscustomobject]@{
Control = 'Auditoría unificada (UnifiedAuditLogIngestionEnabled)'
Valor = $config.UnifiedAuditLogIngestionEnabled
Estado = if ($activa) { 'Activa' } else { 'Inactiva' }
Accion = if ($activa) { 'Sin acción. Guarda este resultado como evidencia de la revisión.' } else { 'Actívala en el portal de Microsoft Purview, en Auditoría, o con Set-AdminAuditLogConfig -UnifiedAuditLogIngestionEnabled $true. Puede tardar hasta 60 minutos.' }
}
Write-Host "Auditoría unificada: $($fila.Estado)"
if ($RutaCsv) {
# UTF-8 con BOM para que Excel en español muestre bien los acentos.
$fila | Export-Csv -Path $RutaCsv -NoTypeInformation -Encoding utf8BOM
Write-Host "CSV guardado en $RutaCsv"
} else {
$fila | Format-List
}