M365Con 2027 – conferencia online gratuita · 11–22 Jan 2027 · 120 sessions→ m365con.net

Blog · Mirko Peters

Deja de malgastar dinero: cómo automatizar la optimización de licencias de Microsoft 365 con PowerShell

By · · Updated

¡Bienvenido de nuevo al blog! Si administras un inquilino de Microsoft 365, seguramente conoces esa sensación de angustia al abrir la factura de facturación a final de mes. Ves decenas, quizá cientos, de licencias activas asignadas a usuarios que no han iniciado sesión desde el año fiscal anterior. Las comprobaciones manuales en el portal dan una sensación de productividad, pero con frecuencia pas

Automatically translated with AI from the original post. Read the English original

▶ BLOGStop Wasting Money: Howto Automate Microsoft…M365.FM
Titelbild: Stop Wasting Money: How to Automate Microsoft 365 License Optimization with PowerShell

¡Bienvenido de nuevo al blog! Si administras un inquilino de Microsoft 365, seguramente conoces esa sensación de angustia al abrir la factura de facturación a final de mes. Ves decenas, quizá cientos, de licencias activas asignadas a usuarios que no han iniciado sesión desde el año fiscal anterior. Las comprobaciones manuales en el portal dan una sensación de productividad, pero con frecuencia pasan por alto cuentas inactivas, uso compartido arriesgado y una enorme fuga de licencias. Si estás cansado de revisar el centro de administración por encima y de llevarte desagradables sorpresas en las auditorías trimestrales, es hora de incorporar la automatización a tu flujo de trabajo.

En esta entrada vamos a ver en detalle cómo escribir un script de PowerShell programado que cruza los registros de inicio de sesión con las licencias activas. Al final de esta guía sabrás cómo identificar los SKU no utilizados, recuperar costes innecesarios cada mes y proteger tu inquilino de una sobrecarga administrativa cada vez mayor.

Introducción a la optimización de licencias de Microsoft 365

La optimización de licencias suele verse como un dolor de cabeza anual. Los responsables de TI se apresuran a extraer exportaciones manuales, preguntan a los jefes de departamento si los contratistas siguen en la empresa y adivinan si una cuenta está realmente abandonada. Este enfoque reactivo garantiza un presupuesto desperdiciado. Cada día que un contratista que ya no está o un empleado que ha dejado la empresa conserva una licencia E5 o Business Premium, tu organización está perdiendo dinero.

Para solucionarlo, debemos tratar la optimización de licencias como un proceso continuo y automatizado. Aprovechando la potencia de PowerShell y Microsoft Graph, podemos crear scripts que hagan el trabajo pesado por nosotros, dándonos datos útiles antes de que termine de prepararse el café de la mañana.

Por qué las comprobaciones manuales en el portal se quedan cortas

¿Por qué no basta con confiar en el centro de administración de Microsoft 365 nativo? El portal está diseñado por comodidad, no para una gobernanza en profundidad. Cuando inicias sesión en la interfaz web, ves instantáneas puntuales sin contexto histórico. El portal no permite cruzar fácilmente las fechas del último inicio de sesión con SKU de licencia concretos de miles de usuarios en una única vista clara y manejable.

Además, las comprobaciones manuales dependen por completo de la memoria humana. ¿Recordaste revisar las cuentas de servicio? ¿Verificaste si ese buzón compartido necesita realmente una licencia de Exchange Online Plan 2? El error humano genera puntos ciegos, y esos puntos ciegos cuestan dinero y añaden riesgos de seguridad.

Selección de los módulos y ámbitos de PowerShell adecuados

Antes de escribir una sola línea de lógica de script, necesitas preparar tu conjunto de herramientas. El ecosistema de PowerShell de Microsoft ha evolucionado, y depender de módulos heredados solo provocará advertencias de obsolescencia y scripts rotos. Tu kit básico debe incluir:

Asegúrate de aplicar el principio de mínimo privilegio al conceder permisos a tus scripts. Nunca uses credenciales de Administrador global para scripts automatizados.

Definición de informes de auditoría semanales de solo lectura

La regla de oro de la automatización de TI es simple: primero, solo lectura. Nunca empieces tu camino de automatización con scripts que eliminen usuarios o quiten licencias automáticamente. Tu primera iteración debe centrarse por completo en la recopilación de datos.

Configura una programación semanal que ejecute una auditoría completa de solo lectura. Esta auditoría debe evaluar los usuarios inactivos, las listas de acceso de invitados, las asignaciones de licencias frente a la actividad real de inicio de sesión, las configuraciones de buzones y los grupos de Microsoft 365 huérfanos. Al establecer un ritmo semanal, sustituyes las urgencias caóticas por una revisión de diez minutos de informes limpios y generados automáticamente.

Cruce de los registros de inicio de sesión con las licencias activas

El ingrediente secreto de la optimización de licencias es el cruce de datos. Una licencia asignada a una cuenta de usuario no tiene sentido si ese usuario no se ha autenticado en 90 días. Tu script necesita obtener dos conjuntos de datos principales de Microsoft Entra ID:

  1. Los SKU de licencia asignados al usuario.
  2. La fecha del último inicio de sesión del usuario (interactivo y no interactivo).

Al combinar estos dos datos con objetos de PowerShell, puedes calcular al instante el desperdicio de licencias. Si el último inicio de sesión de un usuario supera un umbral definido (por ejemplo, 60 o 90 días), el script marca esa cuenta como candidata a la recuperación de la licencia.

Automatizar la entrega de informes y el almacenamiento de artefactos

Un informe que queda guardado en un directorio local no sirve de nada. Necesitas enviar tus conclusiones directamente a las personas que pueden actuar. Configura tu script para generar archivos CSV estructurados y resúmenes HTML claros.

Después, haz que el script envíe el resumen por correo electrónico a tu lista de distribución de gobierno de TI o que lo publique directamente en un canal de Microsoft Teams específico mediante un webhook. Además, almacena los artefactos CSV sin procesar en una biblioteca de documentos de SharePoint de gobierno segura, para mantener un registro histórico con fines de cumplimiento normativo.

Programar de forma segura con Azure Automation y el Programador de tareas

¿Dónde deben residir estos scripts? Aunque puedes ejecutarlos desde un equipo local o un Windows Server mediante el Programador de tareas, utilizando un almacén de credenciales seguro, el enfoque de nivel empresarial es Azure Automation.

Al implementar tus scripts como runbooks de Azure Automation y autenticarte mediante una identidad administrada, eliminas el riesgo de contraseñas codificadas en el script o de secretos de entidades de servicio caducados. Azure Automation gestiona el entorno de ejecución, el registro y el control de errores de forma fluida en la nube.

Implementar salvaguardas de seguridad y cumplimiento

La automatización sin salvaguardas es un desastre a punto de ocurrir. Para proteger tu inquilino, incorpora las siguientes medidas de protección en tu canal de automatización:

Escalonar tu estrategia de corrección

No intentes automatizarlo todo desde el primer día. Despliega tu estrategia de corrección en fases claras:

Solución de problemas habituales en la automatización con PowerShell

Incluso los mejores scripts encuentran obstáculos. Si obtienes resultados vacíos, revisa a fondo los permisos de Graph y las versiones de los módulos, y prueba la consulta en Graph Explorer para aislar el problema. Si experimentas fallos aleatorios, es probable que tu script esté alcanzando los límites de limitación de solicitudes. Implementa retroceso exponencial y lógica de reintento para mantener tus ejecuciones estables. Por último, cuidado con los falsos positivos: mantén una lista de exclusión sólida con las cuentas de servicio y las cuentas de acceso de emergencia.

Preguntas frecuentes

¿La automatización romperá mi inquilino?

No, si empiezas en modo de solo lectura, añades aprobaciones y limitas estrictamente los permisos concedidos a tus cuentas de automatización.

¿Necesito Graph PowerShell ahora?

Sí, es el camino moderno a seguir. Úsalo junto con los módulos de Exchange Online y PnP para cubrir todas tus superficies de administración.

¿Con qué rapidez podemos ver el retorno de la inversión?

La primera ejecución semanal suele revelar una cantidad sorprendente de licencias sin usar y cuentas de invitados inactivas, lo que ofrece oportunidades inmediatas de ahorro de costes.

¿Qué pasa con los entornos multigeo o los MSP?

Parametriza las configuraciones de tus inquilinos, centraliza tu infraestructura de registro y etiqueta tus informes de salida con el identificador de inquilino para escalar en varios entornos.

Conclusión

Automatizar la optimización de licencias de Microsoft 365 es uno de los proyectos de mayor impacto que puede emprender un administrador. Detiene la pérdida mensual de gasto en software desperdiciado, refuerza tu postura de seguridad al limpiar cuentas inactivas y te libera de comprobaciones manuales y tediosas en el portal.

Si quieres escuchar un recorrido completo por estos conceptos, incluidas las explicaciones detalladas de los scripts en vivo y consejos de arquitectura más profundos, no dejes de consultar el episodio de podcast relacionado: Automate Microsoft 365 Tenant Cleanup with PowerShell. ¡Sintonízalo y mejora tu automatización hoy mismo!

Microsoft Graph Microsoft 365 Exchange Online Microsoft 365 admin center PnP PowerShell SharePoint

Related articles

RSS