sábado, 31 de agosto de 2013

¿Que paso ayer?... Con los mails

Exchange Server 2010 guarda, de forma predeterminada, información de seguimiento de los correos que los usuarios envían y reciben. Estos logs son útiles cuando queremos saber qué pasó con un mail.
 
Como casi todo lo relacionado con Exchange Server 2010, la forma más simple de acceder a estos logs es a través de PowerShell.
 
Lo primero es identificar qué mensaje queremos buscar, para lo que podemos utilizar el campo "MessageID" el cual es único para cada mensaje. En muchos casos podemos consultar el "MessageID" en el "Internet Header" del mensaje, pero algunas veces esta información no está disponible ahí, en ese caso podemos consultarlo con PowerShell (Figura 1).

Con el "Subject" del mensaje del cual queremos obtener información y el nombre del Mailbox Server del usuario que envió o recibió el mensaje, podemos hacer la consulta del "MessageID".
 
Get-MessageTrackingLog -Server ARRMBX010 -MessageSubject "MAIL PARA TRACK" | fl EventID, Sender, Mess*ID
 
Figura 1
 
Con el "MessajeID" podemos buscar en los servers que tienen información de Tracking (Los Hub Transport y los Mailbox Servers). Si tenemos unos pocos servers, la búsqueda es simple.
 
 Get-MessageTrackingLog -Server ARRMBX010 -MessageId C1CE5ADA5ED3D246B3E6095DA22AF1FA1D4A67FC@ARRMBX010.arrakis.org | ft EventId, Source, Sender, Recipients, *HostName, Time*
 
Podemos ir cambiando el valor "Server" y de esa forma buscar en otros servidores.  
 
Cuando la infraestructura es más compleja, ¿Como podemos buscar tracking logs en varios servers, que están en diferentes sites-AD, que sean Exchange 2010 y no sean UM ni Client Access? Combinando algunos cmdlets!
 
Get-ExchangeServer: Para obtener el listado de los servers.
Where-Object: Para filtrar esos resultados.
Get-MessageTrackingLog: Para obtener la información de los archivos de logs.
Ft (Format-Table) o Fl (Format-List) : Para seleccionar las propiedades que queremos ver.
 
 
Get-ExchangeServer | Where-Object {($_.AdminDisplayVersion -Like "*14*") -and ($_.ServerRole -ne "UnifiedMessaging" -and $_.ServerRole -ne "ClientAccess") -and ($_.Site -like "*DuneNorte*" -or $_.Site -like "*DuneOeste*")} | Get-MessageTrackingLog -MessageId C1CE5ADA5ED3D246B3E6095DA22AF1FA1D4A7282@ARRMBX010.arrakis.org | ft EventId, Source, Sender, Recipients, *HostName, Time*

La información se mostrará de forma similar al ejemplo (Figura 2)

Figura 2


Para saber qué significan las diferentes combinaciones de "EventId" y "Source", se puede consultar la documentación de TechNet.

Understanding Message Tracking