Puedes usar el Get-MessageTrackingLog cmdlet en el Shell de administración de Exchange para analizar el flujo de correo, análisis forense de mensajes y obtener información diferente sobre los mensajes enviados o recibidos por un buzón específico en su organización de correo electrónico. En este artículo, mostraré varios ejemplos de comandos de una sola línea de PowerShell que suelo usar para rastrear mensajes en Exchange Server 2016/2013/2010 y Office 365 (Exchange Online).
Permítame recordarle que los registros de transporte de Exchange se encuentran en el %ExchangeInstallPath%TransportRolesLogsMessageTracking
carpeta. Y la forma más eficaz y flexible de analizar los registros de seguimiento de mensajes en Exchange es utilizar el cmdlet Get-MessageTrackingLog.
En primer lugar, considere los parámetros principales de Get-MessageTrackingLog que puede usar para filtrar eventos en los registros. Los siguientes parámetros de cmdlet se utilizan con más frecuencia:
- Remitente - búsqueda por remitente;
- Destinatarios - búsqueda por destinatario;
- Servidor - buscar en el servidor de transporte específico;
- Comienzo "30/11/2019 08:00:00" -Final “12/18/2019 21:00:00”: busque el período de tiempo específico;
- Asunto del mensaje - búsqueda por asunto del mensaje;
- EventID - búsqueda por evento de Exchange (por regla general, se utilizan los siguientes códigos: RECIBIR, ENVIAR, FALLO, DSN, ENTREGAR, BADMAIL, RESOLVER, EXPANDIR, REDIRECCIONAR, TRANSFERIR, ENVIAR, MENSAJE DE VENENO, APLAZAR);
- messageID - rastrear por un ID de mensaje.
Si ejecuta el cmdlet Get-MessageTrackingLog sin ningún parámetro, se mostrarán todos los eventos de los registros de transporte de Exchange de los últimos 30 días. El cmdlet muestra solo los últimos 1000 eventos. Para eliminar esta restricción, utilice el –ResultSize Unlimited
parámetro. (No se recomienda hacerlo sin algunos parámetros de filtro adicionales debido a una carga potencialmente alta en su servidor de transporte).
Puede mostrar la información sobre sus eventos de Exchange página por página usando este comando:
Get-MessageTrackingLog | Out-Host –Paging
Para mostrar los datos en el formato de tabla y ajustar el ancho de la columna, se usa el cmdlet Format-Table:
Get-MessageTrackingLog | Format-Table –AutoSize
Si se utilizan varios servidores de transporte de concentradores en su organización de Exchange, deberá especificar el nombre de un servidor para buscar como argumento de la –Server
parámetro. O ejecute el comando de seguimiento de mensajes para cada uno de sus servidores de transporte de concentradores con la canalización:
Get-TransportServer | Get-MessageTrackingLog
Vamos a mostrar todos los correos electrónicos de las últimas 24 horas ((Get-Date).AddHours(-24)
), en el que se especifica un destinatario del dominio @ gmail.com:
Get-MessageTrackingLog -Start (Get-Date).AddHours(-24) -ResultSize unlimited | where {[string]$_.recipients -like "*@gmail.com"}
Para mostrar todos los correos electrónicos enviados por el usuario específico a través de un servidor determinado en un período de tiempo determinado, utilice el siguiente comando (solo los campos de seguimiento específicos se mostrarán en el informe):
Get-MessageTrackingLog -ResultSize unlimited –Sender "cmansion@woshub.com” –server rome-hub-01 -Start "11/30/2019 06:00:00" -End "12/13/2019 22:00:00" |select-object Timestamp,Sender,Recipients,MessageSubject,EventId|ft
Busquemos todos los correos electrónicos enviados por un usuario a otro y exportemos los resultados de la búsqueda a un archivo CSV:
Get-MessageTrackingLog -Sender "cmansion@woshub.com" -Recipients "amorato@woshub.com" -ResultSize unlimited –server rome-hub-01| Select-Object Timestamp,Sender,{$_.recipients},MessageSubject | Export-Csv -Path "C:Exportexchangeexchange_tracking_logs.csv" -Encoding Default -Delimiter ";"
Puede buscar por el asunto del mensaje. Para mostrar todos los correos electrónicos con la palabra "prueba" en el campo del asunto, ejecute el siguiente comando. (Para mostrar los resultados en una ventana gráfica separada como una tabla con las convenientes funciones de clasificación, filtrado y búsqueda, puede usar el Vista fuera de cuadrícula cmdlet.)
Get-MessageTrackingLog -MessageSubject "test" -ResultSize unlimited –server rome-hub-01| Select-Object Timestamp,Sender, {$_.recipients}, MessageSubject | out-gridview
Puede buscar por el ID de mensaje específico (puede obtenerlo del encabezado del mensaje en Outlook):
Get-MessageTrackingLog -messageID "41A4321C3543314FFFFF23122F2BDB7ABD00342@rome-hub-01.woshub.com" -ResultSize unlimited –server rome-hub-01| Select-Object Timestamp,Sender, {$_.recipients}, MessageSubject
Para contar la cantidad de mensajes de correo electrónico entrantes para el buzón específico durante los últimos 7 días, ejecute el siguiente comando:
(Get-MessageTrackingLog -EventID "RECEIVE" -Recipients "amorato@woshub.com" -ResultSize unlimited).Count
Puede mostrar las estadísticas de mensajes más interesantes. Por ejemplo, desea ver cuántos correos electrónicos de diferentes remitentes del gmail.com
han sido recibidos por usuarios de su empresa durante los últimos 5 días (mostraremos el número total de correos electrónicos enviados por cada remitente externo):
Get-MessageTrackingLog -EventId "Receive" -Start (Get-Date).AddDays(-5) -ResultSize Unlimited | Where-Object {$_.Sender -like "*@gmail.com"} | Group-Object Sender | Sort-Object Count -Descending | Format-Table *
Office 365 le permite realizar búsquedas de registros de seguimiento de mensajes desde el Centro de administración de Exchange (EAC). Ve a la Flujo de correo -> Seguimiento de mensajes. Complete los campos de búsqueda. Esta es en realidad la interfaz web para el cmdlet Get-MessageTrackingLog, que permite al usuario generar el comando de seguimiento de PowerShell en un formulario web simple.
Los métodos considerados anteriormente le ayudarán a obtener estadísticas sobre los mensajes enviados y recibidos en su sistema Exchange y diagnosticar diferentes problemas de transporte de correo electrónico.