Puntos clave
- PowerShell permite recopilar de forma centralizada los informes de actividad de usuarios de Microsoft 365 en Exchange Online, Teams, SharePoint y OneDrive.
- Usar el módulo Microsoft Graph PowerShell y Get-MgUser aporta datos más completos y unificados, y simplifica el seguimiento del inventario y del uso.
- Incorporar Graph Reports y las métricas de buzones de Exchange Online al inventario de usuarios facilita los informes de actividad de usuarios de Microsoft para la gobernanza, las auditorías y la optimización de licencias.
- Normalizar y automatizar las exportaciones garantiza informes de usuarios de Microsoft 365 estandarizados y listos para auditoría en todos los tenants.
- La automatización segura con autenticación solo de aplicación, lógica de reintentos y registro permite flujos de trabajo de PowerShell fiables, escalables y desatendidos.
- NinjaOne mejora los informes de usuarios de Microsoft 365 con despliegue remoto de scripts, programación, almacenamiento seguro de credenciales y automatización centralizada.
Los informes de actividad de usuarios de Microsoft 365 (antes Office 365) son fundamentales para hacer un seguimiento del uso de los servicios, garantizar la productividad de los clientes y mantener la seguridad y el cumplimiento. Apoyarte en PowerShell te ofrece un enfoque unificado para reunir información útil de Exchange Online, Teams, SharePoint y OneDrive.
Recopila informes de actividad de usuarios de Microsoft con PowerShell
Microsoft Graph PowerShell ofrece datos de gran calidad y potentes opciones de filtrado. Con PowerShell puedes combinar el inventario de usuarios, el uso y las métricas de buzones en una única canalización centralizada, lo que facilita optimizar licencias, aplicar la gobernanza de accesos e investigar incidentes.
📌 Requisitos previos:
- PowerShell 7 o posterior con los módulos de Microsoft Graph y Exchange Online instalados
- Registro de aplicación en Azure con ámbitos de Graph de mínimo privilegio, como Group.Read.All y Reports.Read.All, además del consentimiento correspondiente
- Permisos opcionales de Exchange Online para las estadísticas de buzones
- Almacenamiento seguro de credenciales y una ruta de salida centralizada para los archivos CSV y JSON
Paso 1: inventariar usuarios con el módulo Microsoft Graph PowerShell
Generar un inventario completo de usuarios sienta las bases para supervisar y gestionar clientes de Microsoft 365. El script siguiente recoge solo los datos de usuario más relevantes, lo que reduce el tiempo de ejecución y mantiene la eficiencia del proceso a gran escala.
Si mantienes un formato de exportación CSV coherente entre tenants, todos los informes seguirán la misma estructura. Así resulta sencillo compararlos, combinarlos y enriquecerlos más adelante con datos de otras fuentes, como Microsoft Graph Reports o Exchange Online.
Ejemplo de script de PowerShell para el inventario de usuarios
Install-Module Microsoft.Graph -Scope CurrentUserImport-Module Microsoft.GraphConnect-MgGraph -Scopes "User.Read.All","Reports.Read.All"Get-MgUser -All -Property "id,displayName,userPrincipalName,mail,accountEnabled,createdDateTime,assignedLicenses" |Select-Object id,displayName,userPrincipalName,mail,accountEnabled,createdDateTime, @{n='LicenseCount';e={$_.assignedLicenses.Count}} |Export-Csv "C:\Reports\M365_Users.csv" -NoTypeInformation |
💡 Consejo: puedes omitir algunas de las propiedades de la línea Get-MGUser -All -Propertypara acotar el alcance de la consulta.
Paso 2: añadir métricas de uso con la API de Graph Reports
Graph Reports aporta información detallada sobre la actividad de los usuarios en los distintos servicios de Microsoft 365. Así salen a la luz las cuentas inactivas y las áreas con uso concentrado, lo que te ayuda a decidir dónde desaprovisionar y dónde ampliar licencias.
Ejemplos de scripts de PowerShell para la API de Graph Reports
El siguiente script recupera la actividad por usuario en distintas cargas de trabajo durante un periodo determinado.
Get-MgReportOffice365ActiveUserDetail -Date (Get-Date).AddDays(-1) -OutFile "C:\Reports\ActiveUserDetail.csv" |
Ten en cuenta que el script anterior solicita los datos del día anterior, indicados por .AddDays (-1). También puedes optar por periodos móviles como los siguientes:
# Last 7 daysGet-MgReportOffice365ActiveUserDetail -Period D7 -OutFile "C:\Reports\ActiveUserDetail_D7.csv"# Last 30 daysGet-MgReportOffice365ActiveUserDetail -Period D30 -OutFile "C:\Reports\ActiveUserDetail_D30.csv" |
Después puedes unir el archivo CSV generado con tu lista de inventario del paso 1 para identificar cuentas inactivas o con poca actividad por carga de trabajo:
$inv = Import-Csv "C:\Reports\M365_Users.csv" # From step 1$usage = Import-Csv "C:\Reports\ActiveUserDetail.csv" # From step 2$joined = $inv | Join-Object -On userPrincipalName -Right $usage -Kind Left # or use a custom hash join# Alternative without a module: build a hash on UPN for the usage file and add the fields you need$joined | Export-Csv "C:\Reports\M365_Users_Usage.csv" -NoTypeInformation |
Paso 3: enriquecer el inventario de usuarios con métricas de buzones de Exchange Online
Incorporar métricas de buzones a tu inventario permite detectar buzones sobredimensionados o de crecimiento rápido antes de que afecten a la productividad del cliente. Además, garantiza que las cuentas y las políticas de los clientes se mantengan correctamente y ayuda a los administradores a migrar buzones de Exchange Online sin contratiempos.
Ejemplo de script de PowerShell para consultar métricas de Exchange Online
El siguiente script te conecta al servicio Exchange Online de Microsoft 365 y recupera las métricas clave de buzón de cada usuario. Así los administradores entienden mejor el uso de los buzones gracias a métricas como el tamaño del buzón, el número de elementos, los elementos eliminados, la última hora de inicio de sesión y los límites de almacenamiento.
Connect-ExchangeOnline -UserPrincipalName [email protected]Get-MailboxStatistics -Identity [email protected] |
Ejecuta el script para los usuarios que cumplan alguno de estos criterios:
- Crecimiento rápido del buzón
- Buzones con mucho almacenamiento o cerca de la cuota
- Buzones VIP, compartidos o de recursos
- Candidatos a migración
- Usuarios sensibles desde el punto de vista del cumplimiento
Paso 4: normalizar, exportar y almacenar los informes de actividad de usuarios de Microsoft 365
Cuando extraes métricas con Get-MgUser, Graph Reports y Exchange Online, por defecto no encajan entre sí. La normalización genera exportaciones estandarizadas, con un formato de datos coherente que agiliza la automatización y permite repetir el proceso en todos los tenants.
Plan de acción recomendado:
- Normaliza los nombres de las propiedades y añade campos calculados, como LicenseCount, IsEnabled y AsOf, para que los conjuntos de datos se unan sin problemas.
- Exporta en CSV para los operadores y en JSON para los dashboards y la automatización.
- Nombra cada archivo con el ID del tenant, la ventana temporal y la versión del script para facilitar la auditoría. Por ejemplo:
- users_{TenantId}_{Window}_{ScriptVersion}.csv
- users_{TenantId}_{Window}_{ScriptVersion}.json
Paso 5: automatizar flujos de trabajo con autenticación segura y registro
Combinar normalización y automatización te permite replicar los flujos de trabajo en todos los tenants. Y con inicios de sesión seguros, tus scripts se ejecutan sin supervisión y según lo programado, sin incidencias.
Automatizar los reintentos y los retrocesos mantiene estables los trabajos, incluso cuando Microsoft 365 limita las solicitudes. El registro estructurado, por su parte, demuestra la eficacia del script, ya que deja constancia de qué se ejecutó y qué métricas se generaron.
Plan de acción recomendado:
- Usa autenticación solo de aplicación para que los scripts desatendidos se ejecuten sin interrupciones.
- Añade configuraciones de reintento y retroceso para mantener la estabilidad de la recopilación pese a la limitación de la API.
- Mantén un registro de ejecución detallado, con horas de inicio y fin, filtros y recuentos de registros, para conservar la trazabilidad en auditorías o revisiones.
- Programa comprobaciones de inventario frecuentes y actualizaciones de actividad semanales para que los informes estén al día sin generar costes innecesarios.
- Si eres MSP, utiliza bucles de PowerShell para recorrer todos tus clientes y generar un informe independiente por cada tenant.
Paso 6: llevar los informes de usuarios de Microsoft 365 al día a día
Una vez recopilados todos los datos necesarios, aplicar los hallazgos en el día a día es lo que convierte las métricas en bruto en información accionable. Al integrar las exportaciones en tus prácticas de cumplimiento, gobernanza y revisión de servicio, obtienes visibilidad sobre las operaciones de tus clientes.
Eso te permite ayudarles a tomar decisiones fundamentadas y reducir riesgos. Además, así puedes ofrecerles planes respaldados por evidencias que se traducen en mejoras de servicio medibles.
Plan de acción recomendado:
- Adjunta los extractos de usuarios y actividad a los paquetes de cumplimiento para demostrar que mantienes registros de acceso precisos y supervisas el uso de los datos.
- Contrasta los informes con las notificaciones de RR. HH. o del directorio para detectar usuarios inactivos, accesos obsoletos o licencias huérfanas.
- Muestra los datos destacados en las QBR para evidenciar tendencias de adopción, crecimiento del uso o reducción del riesgo.
- Archiva los informes para crear una base factual que agilice el análisis posterior a un incidente y su resolución.
Automatiza la recopilación de informes de usuarios de Microsoft 365
Los procesos manuales de recopilación ralentizan el análisis por su carácter repetitivo y, además, disparan los costes operativos. Con la automatización conviertes la recopilación de datos en un proceso coherente y estandarizado que minimiza el error humano.
Ejemplos de puntos de automatización:
- Crea un trabajo nocturno que exporte los inventarios de usuarios con el módulo Microsoft Graph PowerShell.
- Programa scripts semanales que recojan los datos de usuarios activos y un trabajo específico que recopile estadísticas de buzones de los usuarios marcados.
- Automatiza la creación de exportaciones con marca de tiempo y su posterior envío a tu repositorio de evidencias.
Servicios de NinjaOne para recopilar informes de actividad de usuarios de Microsoft 365
NinjaOne mejora la forma de recopilar y gestionar los informes de actividad de usuarios de Microsoft Office 365 gracias a la automatización, la seguridad y la escalabilidad. Sus funciones de ejecución remota de scripts y programación agilizan los flujos de trabajo basados en PowerShell y facilitan los despliegues centralizados y multitenant.
- Despliegue remoto de scripts: ejecuta al instante scripts de Graph Reports, Exchange Online y Microsoft Graph PowerShell de forma centralizada y a gran escala con la función de Ejecución Remota de Scripts de NinjaOne.
- Automatizaciones programadas: utiliza la función de automatizaciones programadas de NinjaOne para ejecutar los scripts de recopilación en intervalos predefinidos, por ejemplo al iniciar el sistema o al iniciar sesión el usuario.
- Campos personalizados seguros: guarda las credenciales sensibles en campos personalizados seguros y accede de forma centralizada a esa información desde tus scripts de PowerShell.
- Amplias capacidades de scripting: crea scripts de PowerShell personalizados para automatizar inventarios de usuarios, identificar usuarios inactivos por carga de trabajo o generar candidatos a optimización de licencias, entre otras tareas.
Optimiza la recopilación de informes de usuarios de Microsoft 365 con PowerShell
Con la retirada de los módulos MSOnline y AzureAD, el salto a Microsoft Graph PowerShell ha traído un enfoque moderno y unificado para recopilar datos de todos los servicios de Microsoft 365.
Al combinar automatización segura, exportaciones normalizadas y una preparación ágil de evidencias, los equipos convierten las métricas en bruto en visibilidad operativa accionable que respalda las auditorías, optimiza el uso de licencias y acelera la investigación de incidentes.
Temas relacionados:
- Cómo usar la API de Microsoft Graph para extraer informes de cumplimiento de varios tenants
- Cómo automatizar las notificaciones de cambios de rol en Microsoft 365 para la supervisión de administradores
- Cómo programar comprobaciones con la API de Graph para licencias caducadas y usuarios inactivos
- Usar la API de Microsoft Graph con Windows PowerShell para supervisar y gestionar clientes de Microsoft 365

