El comando Get-MessageTrace de PowerShell puede ayudar a los administradores de Office 365 a rastrear la entrega y procesamiento de mensajes de correo electrónico que podrían no estar llegando a las bandejas de entrada de sus usuarios. En este artículo, te mostraré cómo utilizar el comando Get-MessageTrace para gestionar y analizar trazas de mensajes de correo electrónico en Office 365.
Uso de PowerShell Get-MessageTrace con Exchange Online
El cmdlet Get-MessageTrace es el método predeterminado para que los administradores analicen y gestionen el tráfico de correo electrónico dentro de Exchange Online. Sin embargo, este comando de PowerShell solo está disponible en entornos de Exchange Online (parte de Office 365).
En un entorno de Exchange local, el comando PowerShell Get-MessageTrace no está disponible, y su alternativa es el cmdlet Get-MessageTrackingLog. El comando PowerShell Get-MessageTrace proporciona funcionalidad similar a su homólogo local, pero nuevamente, este cmdlet está específicamente diseñado para entornos de Office 365 basados en la nube.
Seguimiento de mensajes en Exchange local frente a Exchange Online: Diferencias clave
- Entorno: Exchange local se ocupa de los servidores de una organización, mientras que Exchange Online es un servicio basado en la nube proporcionado por Microsoft.
- Integración: En Exchange Online, el comando Get-MessageTrace se integra perfectamente con las funciones de seguridad y cumplimiento de Office 365, mientras que en entornos locales, se debe utilizar el cmdlet Get-MessageTrackingLog.
- Autenticación: Los métodos de autenticación y las sesiones de PowerShell se gestionan de manera diferente debido a la naturaleza basada en la nube de Exchange Online.
- Escala: La escalabilidad de Exchange Online está diseñada para manejar grandes cargas de trabajo de correo electrónico sin necesidad de actualizaciones de hardware locales.
Conectando a Exchange Online
Aquí tienes un recordatorio rápido: para usar cualquier cmdlet de Exchange Online, necesitas establecer una sesión remota de PowerShell con tu entorno de Office 365. Abre Windows PowerShell y ejecuta el siguiente comando.
Connect-ExchangeOnline

¿Ya te has acostumbrado, verdad? Si necesitas un poco más de ayuda con los requisitos necesarios para poder conectarte, por favor lee mi publicación anterior sobre cómo conectarse a Exchange Online.
Usando Get-MessageTrace con un rango de fechas específico
Analizar el tráfico de correo electrónico dentro de un rango de fechas específico es una tarea administrativa común. El cmdlet Get-MessageTrace te permite filtrar y revisar mensajes de correo electrónico basados en su fecha de creación o entrega. Ten en cuenta que hay un máximo de 10 días de historial al que este comando de PowerShell puede acceder. Si necesitas investigar el flujo de correo electrónico de hace más de 10 días, deberás utilizar el sitio web del Centro de Administración de Exchange y ejecutar un rastreo de mensajes por un período de tiempo más largo.
Aquí tienes una guía paso a paso sobre cómo usar el cmdlet Get-MessageTrace para buscar mensajes dentro de un rango de fechas específico.
Últimos x minutos
El parámetro ‘StartDate’ es el que se utiliza para especificar el período de tiempo que desea buscar. Puede ingresar fechas (hasta un máximo de 10 días). Sin embargo, también puede incluir horas. Asegúrese de encerrar sus rangos de fecha/hora entre comillas (“”).
Vamos a intentar usar el cmdlet Get-MessageTrace para buscar correos electrónicos en los últimos 90 minutos:
Get-MessageTrace -StartDate "08/15/2023 10:45 AM" -EndDate "08/15/2023 12:15 PM"

I’ll remind you that I am using my Microsoft 365 Developer tenant, so there’s not a lot of email activity occurring. If you get no output, it simply means that no email traffic records were returned. This can be completely normal.
También podría usar un comando de PowerShell más sofisticado para retroceder 45 minutos de esta manera:
Get-MessageTrace -StartDate (Get-Date).AddMinutes(-45) -EndDate (Get-Date)
Déjame enviar algunos correos electrónicos para que puedas ver cómo funcionará la salida en tu entorno.
Últimas x horas
Ahora, esto es importante: ¡Exchange Online casi con seguridad estará registrando los horarios de entrega de correos electrónicos en UTC! Por lo tanto, necesito ajustar mis horarios de fin de fecha, y te mostraré cómo hacerlo.
Vamos a buscar en las últimas 8 o 9 horas:
Get-MessageTrace -StartDate "08/15/2023 10:45 AM" -EndDate "08/15/2023 7:00 PM"

¡Ahí vamos! Esto muestra un correo electrónico de otra cuenta a mi cuenta principal de Administrador Global. Mientras escribo esto, envié el correo electrónico alrededor de las 12:15 PM (CDT). Sin embargo, UTC tiene 5 horas de adelanto. Por eso, la fila del correo electrónico informa la entrega a las 5:16 PM (UTC). ¡Por favor, ten en cuenta esa diferencia horaria!
Últimos x días
Aunque no tengo historial de entrega de correos electrónicos, aún puedo mostrarte el comando. Si deseas mostrar TODOS los correos electrónicos procesados a través de Exchange Online, simplemente incluye las fechas.
Get-MessageTrace -StartDate 08/05/2023 -EndDate 08/15/2023

Allá vamos. Debido a que tengo Azure AD Connect Cloud Sync configurado en este inquilino, recibo un correo electrónico semanal con actualizaciones de estado. El correo electrónico fue enviado el 8/8/2023.
Nuevamente, recuerda que solo puedes buscar hasta un máximo de 10 días atrás. Si necesitas explorar más atrás en el tiempo, deberás utilizar la función de Rastreo de mensajes en el sitio web del Centro de administración de Exchange. Allí, puedes crear una solicitud para retroceder hasta 90 días.
Usando Get-MessageTrace para buscar por dirección de correo electrónico del remitente
Identificar mensajes enviados por un remitente específico puede ser crucial para varios propósitos, como investigar patrones de comunicación o abordar preocupaciones de seguridad. El cmdlet Get-MessageTrace te permite buscar rastros de mensajes desde una dirección de correo electrónico en particular.
Aquí te explicamos cómo usar el parámetro ‘-SenderAddress’ para buscar rastros de mensajes de un remitente específico:
Get-MessageTrace -SenderAddress "[email protected]"

Genial, hay otro. Bonito e intuitivo. Y, un excelente consejo: si diriges los resultados al cmdlet Format-List, obtendrás un excelente resumen de los resultados, incluyendo el estado de entrega, el identificador de mensaje, el identificador de trazado de mensaje, la dirección del remitente, la dirección del destinatario y mucho más.

Usar Get-MessageTrace para buscar por dirección de correo electrónico del destinatario
Seguir los correos electrónicos enviados a un destinatario en particular es otra tarea esencial para los administradores. Ya sea que estés gestionando la entrega de correos electrónicos o asegurando que la información confidencial llegue a las personas adecuadas, la capacidad de buscar por dirección de correo electrónico del destinatario es invaluable.
Veamos un ejemplo, aquí buscaremos todos los correos electrónicos entregados a… mí:
Get-MessageTrace -RecipientAddress "[email protected]"

Esto muestra 3 mensajes de correo electrónico enviados a mi dirección de correo electrónico en el inquilino. Y, por cierto, si NO incluyes parámetros relacionados con el tiempo, informará sobre las últimas 48 horas.
¿Puedes usar Get-MessageTrace para buscar por asunto del correo electrónico?
Lamentablemente, no puedes utilizar el comando Get-MessageTrace para buscar por asunto. Para esta necesidad, querrás utilizar Microsoft Purview y crear una búsqueda de eDiscovery (contenido). Puedes encontrar más información al respecto en nuestro artículo anterior sobre eDiscovery.
Usando Get-MessageTrace para buscar por dirección IP de origen y destino
También puedes utilizar el comando Get-MessageTrace para buscar por direcciones IP de origen y destino. Esto te permite rastrear mensajes de correo electrónico basados en las direcciones IP de los servidores emisores y receptores. Esto puede ser particularmente útil para diagnosticar problemas de entrega, identificar actividades sospechosas y comprender la ruta que siguen los mensajes a través de tu infraestructura de correo electrónico.
Aquí, también podemos utilizar los parámetros ‘-ToIP’ y ‘-FromIP’. Por ejemplo, si quisiéramos buscar todos los correos electrónicos provenientes de la dirección IP de origen 44.42.2.55 y nuestra IP pública del firewall perimetral para recibir correos electrónicos, 101.3.2.88, podríamos utilizar el siguiente comando como ejemplo.
Get-MessageTrace -ToIP "4.42.2.55" -FromIP "101.3.2.88"

De nuevo, no tengo contenido realmente genial aquí para mostrarte, pero funciona. Realmente, lo hace.
Cómo utilizar comodines y coincidencias parciales
Caracteres comodín para limitar rápidamente los resultados. Por ejemplo, por motivos de seguridad o cumplimiento, supongamos que su oficial de cumplimiento desea ver un registro de todos los correos electrónicos procesados desde Gmail en las últimas 48 horas. ¡Fácil!
Get-MessageTrace -SenderAddress *@gmail.com
Vea, eso es bastante fácil de hacer. Y puede hacer lo mismo con los destinatarios. Si desea ver todos los correos electrónicos enviados a todos los que tengan una dirección de correo electrónico que comience con la letra “m”, pruebe el siguiente comando:
Get-MessageTrace -RecipientAddress m*@x3v6p.onmicrosoft.com
De nuevo, es muy sencillo.
Cómo obtener resultados más detallados con Get-MessageTraceDetail
Si desea ampliar la salida del comando Get-MessageTrace, le encantará saber que el cmdlet Get-MessageTraceDetail amplía esa información y le muestra los eventos individuales de procesamiento y entrega de una transacción de correo electrónico. Déjame mostrarte.
Primero, ejecutaré el cmdlet Get-MessageTrace y lo canalizaré al comando “Format-List” (fl) para obtener algunos detalles.
Get-MessageTrace | fl

Aquí, podemos ver algunos detalles adicionales sobre 4 mensajes de correo electrónico en las últimas 48 horas. Entonces, lo que podemos hacer es tomar el ID de rastreo del mensaje y la dirección del destinatario del segundo correo electrónico y usar el siguiente comando:
Get-MessageTraceDetail -MessageTraceID e4f33ded-b67f-49b8-9a00-08db9dbb953a -RecipientAddress [email protected]

Aquí, podemos ver los 3 eventos que conforman la recepción y entrega del mensaje de correo electrónico desde Internet hasta el buzón de Exchange real de Megan. Muy buena cantidad de detalles aquí. Esto puede mostrar concebiblemente si un mensaje fue entregado directamente en la carpeta de Correo no deseado de un usuario, o si fue reenviado automáticamente a otro buzón interno (o externo). En general, esa es información muy útil para profesionales de IT y administradores de Exchange.
Cómo exportar resultados a un archivo CSV
Más a menudo de lo que no, estará ejecutando búsquedas que informarán MUCHOS registros. Seguramente querrá usar Excel para analizar y filtrar los resultados. Para hacer esto, simplemente dirija sus resultados a través del comando Export-CSV, así:
Get-MessageTrace | Export-CSV AllEmailsInLast48Hours.csv

Esto solo tomó un par de segundos. ¡Muy bien!
Cómo realizar búsquedas avanzadas con Group-Object
Puede utilizar el cmdlet Group-Object para obtener una visión más general de nuestra entrega de correo electrónico.
Remitentes de correo electrónico más activos
Puede utilizar el siguiente comando para encontrar usuarios que hayan enviado la mayor cantidad de correos electrónicos en los últimos 7 días. Permítame mostrarle el comando y luego se lo explicaré.
Get-MessageTrace -StartDate (Get-Date).AddDays(-10) -EndDate (Get-Date) | Group-Object -Property SenderAddress | Select Name,Count | Sort Count -Descending

Aquí, primero reunimos la lista completa de correos electrónicos procesados en los últimos 10 días. Luego, tomamos esa salida y utilizamos el comando Group-Object, usamos la propiedad ‘SenderAddress’, obtenemos el recuento (número de correos electrónicos) y lo ordenamos por la mayor cantidad primero.
Destinatarios que reciben la mayor cantidad de correos electrónicos
De manera similar, podemos reunir muy rápidamente los usuarios que recibieron la mayor cantidad de correos electrónicos en los últimos 10 días ejecutando el mismo comando y reemplazando la propiedad ‘SenderAddress’ con ‘RecipientAddress’. Veamos qué sucede:
Get-MessageTrace -StartDate (Get-Date).AddDays(-10) -EndDate (Get-Date) | Group-Object -Property RecipientAddress | Select Name,Count | Sort Count -Descending

I do love how powerful and simple PowerShell can be. Now, we have the information. Again, the data in this tenant is VERY low. You will undoubtedly see more robust results when you run these commands in your tenant.
El cmdlet Get-MessageTrace ofrece flexibilidad y control
Ya sea que necesite buscar dentro de un rango de fechas específico, identificar trazas de mensajes de un remitente en particular, o rastrear trazas de mensajes enviados a un destinatario específico, el cmdlet Get-MessageTrace proporciona la flexibilidad y control que necesita. Además, la capacidad de exportar resultados a un archivo CSV mejora su capacidad de analizar y documentar patrones de comunicación por correo electrónico. Al dominar el uso del cmdlet Get-MessageTrace, puede gestionar de manera efectiva el tráfico de correo electrónico y obtener valiosos conocimientos sobre las actividades de comunicación de su organización.