[Powershell Script] Message Tracking on multiple Hub Transport Server

Message Tracking in a large exchange environment is a tiring job, you will have to search message on each hub transport server one by one, to make this easy for myself I wrote this script function for myself, please feel free to leave your comments and feedback.

(.) dot source the script in your PowerShell session to import the function

Example:

. .\Get-MessageTrace.ps1 <place a (.) and a space before the script>

Example 1 -: Track Message based on Sender and Recipient

Get-MessageTrace -Sender Sunil.chauhan@xyz.com -Recipient testuser@xyz.com

Example 2 -:
Track Message based on Recipient

Get-MessageTrace -Recipient testuser@xyz.com

Example 3 -: Track Message based on Sender and Recipient

Get-MessageTrace -Sender Sunil.chauhan@xyz.com
Example 4 -: By Default script will only search for last 24 hours logs, for tracking emails over 24 hours or more period use "-Days" Parameter. 

Below example demonstrate searching for last 3 Day


# Get-MessageTrace -Sender Sunil.chauhan@xyz.com -Recipient testuser@xyz.com -days 3
# Get-MessageTrace -Sender Sunil.chauhan@xyz.com -days 3
# Get-MessageTrace -Recipient Sunil.chauhan@xyz.com -days 3

Download from GitHub

# Author : Sunil Chauhan
# Email: Sunilkms@gmail.com
# Example 1 -: Get-MessageTrace -Sender Sunil.chauhan@xyz.com -Recipient testuser@xyz.com
# Example 2 -: Get-MessageTrace -Sender Sunil.chauhan@xyz.com
# Example 3 -: Get-MessageTrace -Recipient testuser@xyz.com

# By Default only 24 hours of logs will be searched, for tracking last 3 Days

# Example 4 -: Get-MessageTrace -Sender Sunil@xyz.com -Recipient testuser@xyz.com -days 3
# Example 5 -: Get-MessageTrace -Sender Sunil.chauhan@xyz.com -days 3
# Example 6 -: Get-MessageTrace -Recipient Sunil.chauhan@xyz.com -days 3 

function Get-MessageTrace {
param(
$sender,
$Recipients,
$days= 1
)
write-host "By Default only 24 hours of logs will be searched, you can use parameter '-days 3' to search 3 days old logs" -ForegroundColor Yellow

$days= "-" + $days
$TS = Get-TransportServer
$report=@()

#Recipient Search Block
if ($Recipients -ne $null -and $sender -eq $null)
{
foreach ($Server in $ts)
{
$Logs=Get-MessageTrackingLog -Recipients $Recipients -Start (get-date).AddDays($days) -Server $Server.Name -ResultSize unlimited
$Report+=$logs
}
if ($report)
{
$report | Select Sender,Recipients,MessageSubject,EventId,Timestamp,RecipientStatus | sort timestamp -Descending
}
}

#Sender Search Block
if ($sender -ne $null -and $Recipients -eq $null)
{
foreach ($Server in $ts)
{
$Logs=Get-MessageTrackingLog -Sender $sender -Start (get-date).AddDays($days) -Server $Server.Name -ResultSize unlimited
$Report+=$logs
}
if ($report)
{
$report | Select Sender,Recipients,MessageSubject,EventId,Timestamp,RecipientStatus | sort timestamp -Descending
}
}

#Recipient & Sender Search Block
if ($Recipients -ne $null -and $sender -ne $null)
{
foreach ($Server in $ts)
{
$Logs=Get-MessageTrackingLog -Recipients $Recipients -Start (get-date).AddDays($days) -Server $Server.Name -ResultSize unlimited
$Report+=$logs
}
if ($report)
{
$report | ? {$_.Sender -like $sender }| Select Sender,Recipients,MessageSubject,EventId,Timestamp,RecipientStatus | sort timestamp -Descending
}
}
}

Comments