/

Cómo detectar y deshabilitar buzones compartidos inactivos en los tenants de tus clientes

por Team Ninja
How to Detect and Disable Inactive Mailboxes Shared Across Client Tenants blog banner image
How to Detect and Disable Inactive Mailboxes Shared Across Client Tenants blog banner image

Prueba nuestro software de gestión de endpoints n.º 1 en G2

Sin necesidad de tarjeta de crédito, acceso completo a todas las funciones.

Webinar

Actualizaciones de NinjaOne 12.0: todo lo que necesitas saber

Automatiza las aspectos más complejos de la TI

Los buzones compartidos de Microsoft 365 son muy útiles para el trabajo en equipo, pero los que quedan abandonados se convierten en un consumo silencioso de recursos y en un riesgo de seguridad. Automatizar la generación de informes sobre buzones inactivos es clave para mantener un entorno seguro, conforme con la normativa y eficiente en costes.

En esta guía aprenderás a identificar estas cuentas inactivas, generar informes de auditoría claros y aplicar acciones correctivas con PowerShell en los tenants de tus clientes.

Cómo identificar y gestionar buzones inactivos con PowerShell

Mantener los tenants de Microsoft 365 libres de buzones compartidos sin uso refuerza la seguridad, mejora el rendimiento y simplifica las auditorías.

📌 Caso de uso: realiza esta limpieza durante el mantenimiento periódico, en la incorporación o salida de clientes, o en las revisiones trimestrales (QBR) para garantizar el cumplimiento y un uso eficiente de los recursos.

📌 Requisitos previos: antes de empezar, asegúrate de contar con:

  • Un rol de administrador global de Microsoft 365 o de administrador de Exchange.
  • El módulo de PowerShell de Exchange Online instalado.
  • PowerShell 5.1 o versiones posteriores.
  • (Opcional) Una herramienta RMM como NinjaOne para ejecutar scripts a gran escala en varios tenants.
  • (Opcional) Etiquetado en el Registro para el seguimiento en entornos híbridos.

Te recomendamos revisar ⚠️ Aspectos a tener en cuenta antes de continuar.

Paso 1: conéctate a Exchange Online con PowerShell

Para gestionar buzones en los tenants de tus clientes, primero necesitas una conexión segura con Microsoft 365.

  1. Abre PowerShell (Admin) o Windows Terminal (Admin).
  2. Instala el módulo necesario.
    • Ejecuta el siguiente comando para instalar el módulo ExchangeOnlineManagement. Confirma las indicaciones que aparezcan:

Install-Module -Name ExchangeOnlineManagement -Force -AllowClobber

  1. Establece la conexión.
    • Ejecuta el comando siguiente y sustituye [email protected] por tu cuenta de administrador. Se abrirá una ventana de autenticación moderna para que inicies sesión.

Connect-ExchangeOnline -UserPrincipalName [email protected]

Una vez conectado, podrás listar, auditar y gestionar los buzones de tus tenants siguiendo los pasos que se indican a continuación.

Paso 2: identifica todos los buzones compartidos y la fecha del último inicio de sesión

Para encontrar buzones inactivos, primero necesitas reunir una lista de todos los buzones compartidos y comprobar su última fecha de acceso.

Una vez conectado a Exchange Online, ejecuta los siguientes comandos de PowerShell.

  1. Obtén todos los buzones compartidos del tenant:

$sharedMailboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox -ResultSize Unlimited

  1. Comprueba la hora del último inicio de sesión de cada buzón:

$sharedMailboxes = Get-Mailbox -RecipientTypeDetails SharedMailbox -ResultSize Unlimited
$mailboxReport = foreach ($mb in $sharedMailboxes) {
$auditLog = Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-90) -EndDate (Get-Date) -Operations "MailItemsAccessed" -UserIds $mb.PrimarySmtpAddress
[PSCustomObject]@{
DisplayName = $mb.DisplayName
PrimarySMTP = $mb.PrimarySmtpAddress
LastActivity = if ($auditLog) { ($auditLog | Sort-Object CreationDate -Descending | Select-Object -First 1).CreationDate } else { "No Activity Found" }
}
}
$mailboxReport | Format-Table -AutoSize

Al terminar, tendrás un informe claro que muestra qué buzones compartidos están activos y cuáles están inactivos. Ese informe será la base de tus siguientes acciones: deshabilitar el buzón o convertirlo en inactivo por motivos de cumplimiento.

Paso 3: filtra y exporta los buzones inactivos

Ahora que has recopilado señales de actividad, puedes empezar a identificar qué buzones podrían llevar inactivos más tiempo del umbral que hayas definido.

Partiendo de la lista de buzones obtenida en el paso 2, el siguiente script de PowerShell los filtra según el indicador de actividad elegido y un umbral definido (por ejemplo, 90 días), y después exporta los resultados a un archivo CSV para su revisión.

  1. Define tu umbral de inactividad (por ejemplo, 90 días):

$cutoffDate = (Get-Date).AddDays(-90)

  1. Filtra la lista de buzones compartidos para localizar los inactivos:

$cutoffDate = (Get-Date).AddDays(-90)

$dormantMailboxes = foreach ($mb in $sharedMailboxes) {
$auditLog = Search-UnifiedAuditLog -StartDate $cutoffDate -EndDate (Get-Date) -Operations "MailItemsAccessed" -UserIds $mb.PrimarySmtpAddress
if (-not $auditLog) {
[PSCustomObject]@{
DisplayName = $mb.DisplayName
PrimarySMTP = $mb.PrimarySmtpAddress
LastActivity = "No Activity Found"
}
}
}

  1. Exporta los resultados a un archivo CSV:

$dormantMailboxes | Export-Csv -Path "C:\Reports\InactiveSharedMailboxes.csv" -NoTypeInformation

Después de ejecutar este script, tendrás un archivo CSV con los buzones compartidos en los que no se ha detectado actividad según la señal de auditoría elegida. Puedes usar este informe como lista de revisión para acciones posteriores, como una revisión de accesos, una evaluación de archivado u otras decisiones de ciclo de vida, según los requisitos de tu organización.

Paso 4: gestiona los buzones compartidos sin actividad detectada

Una vez identificados los buzones compartidos sin señales de actividad reciente en el paso anterior, revísalos y valídalos antes de tomar ninguna medida. En función de los requisitos de cumplimiento y de ciclo de vida de tu organización, elige la acción de gestión adecuada para cada buzón incluido en el informe.

  • Opción 1: bloquear el inicio de sesión de la cuenta asociada.
    • Esta acción bloquea el inicio de sesión interactivo de la cuenta asociada, lo que ayuda a reducir las vías de acceso no autorizado sin perder los datos ni la configuración del buzón:

Set-Mailbox -Identity "SharedMailboxName" -AccountDisabled $true

  • Opción 2: retirar los permisos delegados (recomendado antes de deshabilitar)
    • Retira los permisos de acceso total de un usuario concreto:

Remove-MailboxPermission -Identity "SharedMailboxName" -User [email protected] -AccessRights FullAccess -Confirm:$false

    • Retira los permisos Send As de un usuario concreto:

Remove-RecipientPermission -Identity "SharedMailboxName" -Trustee [email protected] -AccessRights SendAs -Confirm:$false

  • Opción 3: convertirlo en un buzón de usuario normal (para archivado)
    • Ejecuta este script:

Set-Mailbox -Identity "SharedMailboxName" -Type Regular

  • Opción 4: etiquetarlo para el seguimiento de retención
    • Usa un atributo personalizado para etiquetar buzones y facilitar su identificación, los informes o las acciones de seguimiento dentro de tus procesos de gestión:

Set-Mailbox -Identity "SharedMailboxName" -CustomAttribute1 "Inactive_90Days"

Al completar este procedimiento, los buzones seleccionados pueden quedarse sin acceso delegado, convertirse en otro tipo de buzón o etiquetarse para el seguimiento interno, según tus necesidades de gestión. Estas acciones mejoran la visibilidad administrativa y facilitan las tareas de gestión posteriores.

Los cambios se aplican de inmediato; aun así, conviene validar los resultados revisando las propiedades y los permisos de cada buzón procesado (por ejemplo, con Get-Mailbox, Get-MailboxPermission o Get-RecipientPermission).

Paso opcional: guarda los metadatos en el Registro o en un archivo de registro

En entornos híbridos o para un seguimiento local, puedes guardar los resultados de la auditoría directamente en el Registro de Windows.

Este paso opcional crea un registro permanente del análisis en tu equipo de gestión, algo útil para seguir tendencias o integrarlo con sistemas on-premise:

  1. Crea la ruta de la clave del Registro (ejecútalo como administrador):

New-Item -Path "HKLM:\SOFTWARE\YourOrg\MailboxAudit" -Force

  1. Registra la marca de tiempo y el número de buzones inactivos:

Set-ItemProperty -Path "HKLM:\SOFTWARE\YourOrg\MailboxAudit" -Name "LastDormantScan" -Value (Get-Date).ToString("u")
Set-ItemProperty -Path "HKLM:\SOFTWARE\YourOrg\MailboxAudit" -Name "DormantMailboxesCount" -Value $dormantMailboxes.Count

  1. Verifícalo desde el Símbolo del sistema (Admin):

reg query HKLM\SOFTWARE\YourOrg\MailboxAudit

Una vez implementado, tu sistema conservará un historial verificable de las auditorías de buzones que podrás consultar en los informes de cumplimiento o integrar con herramientas de monitorización. Las entradas del Registro se mantendrán hasta que las modifiques o las elimines manualmente, lo que te proporciona un registro a largo plazo de tu trabajo de higiene del tenant.

⚠️ Aspectos a tener en cuenta

En esta sección se señalan posibles dificultades que conviene tener presentes al seguir esta guía.

RiesgosPosibles consecuenciasCómo revertirlo
1. Identificar mal la inactividad ($null LastLogonTime)Un buzón sin hora de inicio de sesión ($null) puede ser un buzón nuevo que nunca se ha usado, o uno al que solo se accede mediante protocolos que no actualizan esta estadística. Confundirlo con un buzón inactivo puede interrumpir el funcionamiento de un buzón activo crítico.Contrasta la información con otros datos, como los registros de flujo de correo (MessageTrace) o el registro de auditoría unificada en busca de eventos MailItemsAccessed, antes de actuar.
2. Permisos de administrador insuficientesEjecutar Get-MailboxStatistics o Set-Mailbox sin el rol de administrador de Exchange provocará errores, fallos en el script e informes incompletos.Asegúrate de que tu cuenta tiene asignados los roles adecuados (por ejemplo, administrador de Exchange) y permisos suficientes en Exchange Online (RBAC) antes de ejecutar los comandos de PowerShell.
3. Pérdida accidental de datos o interrupción del servicioDeshabilitar un buzón que sigue en uso o convertir un buzón compartido en un buzón de usuario normal romperá de inmediato el acceso del equipo e interrumpirá la actividad del negocio.Restablece el acceso de inmediato revirtiendo el comando:

Set-Mailbox -Identity "MailboxName" -AccountDisabled $false

O vuelve a convertirlo:

Set-Mailbox -Identity "MailboxName" -Type Shared

4. Tiempos de espera del script en tenants grandesLanzar consultas de estadísticas sobre miles de buzones puede activar las políticas de limitación (throttling) de Exchange Online, lo que hará que el script falle o devuelva datos incompletos.Usa paginación con el parámetro -ResultSize Unlimited e introduce pausas (Start–Sleep -Seconds 2) entre lotes de peticiones para evitar la limitación.
5. Corrupción del Registro (paso opcional)Editar el Registro de Windows sin una copia de seguridad puede dañar la configuración del sistema y provocar errores en las aplicaciones o inestabilidad.Exporta siempre una copia de seguridad de la clave del Registro antes de hacer cambios:

reg export HKLM\SOFTWARE\YourOrg C:\backup\MailboxAuditBackup.reg

Si se produce un error, importa la copia de seguridad para restaurar el estado anterior.

6. Falsos positivos en los informes de auditoríaFiarte solo de LastLogonTime puede dejar fuera buzones que se usan para enviar alertas automáticas o que reciben correos esporádicos pero importantes, lo que llevaría a una clasificación incorrecta.Aplica un proceso de revisión con varios criterios. Comprueba los elementos enviados recientemente, las reglas de bandeja de entrada o las direcciones de reenvío antes de cerrar la lista de buzones inactivos.

Claves para una gestión segura de los buzones compartidos

Gestionar bien los buzones inactivos requiere una planificación cuidadosa que va más allá de ejecutar scripts.

Activa el registro de auditoría de buzones

Antes de tomar cualquier medida, asegúrate de que el registro de auditoría está activado en tus buzones compartidos.

Así dispondrás de datos detallados sobre quién accedió al buzón y cuándo, lo que crea un rastro imprescindible para comprobar en el futuro si un buzón compartido está activo y para las auditorías de cumplimiento. Estos datos históricos resultan muy valiosos si más adelante necesitas verificar patrones de uso.

Ten en cuenta las políticas de retención y las retenciones legales

Contrasta siempre tu lista de buzones inactivos con las políticas de retención de Microsoft 365 y las retenciones legales de tu organización.

Un buzón sujeto a retención por litigio o a una política de retención activa no puede eliminarse de forma permanente y debe conservarse íntegro. Bloquear el acceso es aceptable, pero los datos deben conservarse según tus requisitos de cumplimiento.

Comprueba las licencias de los buzones compartidos

Aunque los buzones compartidos de menos de 50 GB no suelen requerir licencia, confírmalo antes de convertirlos o eliminarlos. Algunas aplicaciones integradas o configuraciones heredadas pueden haber asignado una licencia.

Además, revisa las configuraciones de seguridad o de servicio aplicadas a los buzones compartidos, ya que ciertas funciones o integraciones pueden implicar consideraciones de licenciamiento según cómo se use el buzón.

Scripts seguros en varios tenants

Cuando automatices este proceso en los tenants de tus clientes, nunca guardes las credenciales de administrador en texto plano dentro de los scripts. Recurre a métodos seguros como Azure Key Vault o la autenticación basada en certificados (registros de aplicaciones) para permitir un acceso controlado y no interactivo.

Estas prácticas reducen el riesgo de exposición de credenciales y permiten una automatización segura y escalable en todos los entornos.

Cómo ayudan herramientas de automatización como NinjaOne

Una plataforma RMM puede automatizar la ejecución de las tareas de gestión de buzones y aportar flujos de trabajo más coherentes a los MSP.

FunciónEn qué ayuda
Despliegue centralizado de scriptsEjecuta los scripts de PowerShell necesarios para obtener los datos de buzones inactivos de todos tus clientes desde un único panel, sin conexiones manuales tenant por tenant.
Auditorías e informes automatizadosUsa la plataforma RMM para recopilar la salida de los scripts y generar informes de los endpoints gestionados, que puedes utilizar para revisar los datos de actividad de los buzones.
Alertas proactivasConfigura disparadores que creen tickets o alertas cuando los buzones inactivos superen un umbral determinado, para poder actuar antes de una auditoría.
Integración en los flujos de trabajoIncorpora estas comprobaciones automáticas a los procedimientos estandarizados de incorporación de clientes (QBR) y garantiza una higiene del tenant coherente y facturable.

Identificar los buzones inactivos para ganar visibilidad operativa

Dominar la generación de informes de buzones inactivos es esencial para eliminar riesgos de seguridad y reducir el desorden administrativo en tus tenants de Microsoft 365. Esta guía te ha mostrado un camino claro para identificar cuentas inactivas con PowerShell, deshabilitarlas o etiquetarlas por cumplimiento y exportar informes para las revisiones con clientes.

Al automatizar este proceso, conviertes una tarea manual y tediosa en una estrategia escalable y proactiva que mejora la higiene y la seguridad de todos los tenants de tus clientes.

Quizá también te interese...

¿Listo para simplificar los aspectos más complejos de las TI?