Отслеживание писем в Exchange через PowerShell

Опубликовано: 21.06.2013
Автор: Виталий Бочкарев
Поддержать автора статьи по этой ссылке

Для того, чтобы отслеживать письма в Exchange 2010 можно использовать Power Shell. Для этого на почтовом сервере существуют специальный командлет Search-MessageTrackingReport. Для того, чтобы использовать этот командлет с компьютера администратора, нужно открыть сессию к рабочему пространству Exchange 2010 с помощью команды New-PSSession.

Командлет Search-MessageTrackingReport позволяет принимать много параметров, но наиболее важные из них это:

  • Identity - имя почтового ящика;
  • Sender - адрес отправителя;
  • BypassDelegateChecking - разрешение администратору обрабатывать чужой почтовый ящик.

Также можно использовать дополнительные параметры фильтрации поиска сообщений:

  • Recipients - адрес получателя (можно использовать как замену параметра Sender);
  • Subject - тема сообщения;
  • ResultSize - количество писем для вывода в отчет.

Ниже представлен скрипт, который я обычно использую для отслеживания писем при расследовании проблем с их доставкой.

# Переменные скрипта
$MailboxServer = "SERVERNAME.domain.com"
$MailboxID = "USERACCOUNT"
$SenderEmail = "EMAIL"
# Открытие сессии к почтовому серверу
$ConnectionLink = 'http://' + $MailboxServer + '/PowerShell/'
$Session = New-PSSession -ConfigurationName Microsoft.Exchange `
 -ConnectionUri $ConnectionLink -Authentication Kerberos
Import-PSSession $Session
# Поиск писем в указанном почтовом ящике от указанного отправителя
$msg = Search-MessageTrackingReport -Identity $MailboxID -Sender $SenderEmail -BypassDelegateChecking
# Формирование отчета в CSV файл
If ($msg -is [system.array])
{
 $msg | %{ Get-MessageTrackingReport -Identity $_.MessageTrackingReportId -BypassDelegateChecking } | `
   Select SubmittedDateTime, FromAddress, RecipientAddresses, Subject, RecipientTrackingEvents, `
   MessageTrackingReportId |  `
   Export-Csv ((Get-Childitem env:USERPROFILE).Value + "\Desktop\PSOutput.csv") `
   -Delimiter "`t" -Encoding UTF8
}
Else
{
 $nothing | Out-File ((Get-Childitem env:USERPROFILE).Value + "\Desktop\PSOutput.csv") -Encoding UTF8
}
# Закрытие сессии к почтовому серверуExit-PSSession

В отчете можно увидеть следующую информацию

SubmittedDateTime 04.07.2013 13:25:08
FromAddress hismail@domain.com
RecipientAddresses mymail@domain.com
Subject Very important e-mail
RecipientTrackingEvents mymail@domain.com,Delivered,,2013-07-04T13:25:09.0390000Z
MessageTrackingReportId Message-Id=<xxxx@SENDERMBXSERVER>, Server=SENDERHUBSERVER, Internal-Id=xxx, Recipient=xxx, Domain=domain.com

Интересная информация в этом отчете помечена жирным шрифтом: доставлено ли письмо и когда, с какого сервера пришло письмо, через какой сервер прошло письмо.