Предыдущие посты по работе с почтовым сервером MS Exchange Server 2016 можно найти здесь.
Сегодня расскажу о трёх скриптах, которые использую для получения логов от почтового сервера Exchange 2016. По сути, все операции с получением логов умещаются в одном командлете Get-MessageTrackingLog. С помощью него можно с легкостью получить нужные данные, обратившись через консоль Exchange Managment Shell. Впрочем, можно добавить командлеты Exchange и в обычную сессию PowerShell воспользовавшись командой Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn.
Итак, начну с самого простого запроса. Представим, что необходимо удалённо подключиться к почтовому серверу в домене и запросить логи для почтового ящика за прошедшие 12 часов. Результат вывода нужно будет сохранить на рабочий стол текущего пользователя в формате *.csv.
Копируем в консоль ISE, запущенную от имени администратора, этот скрипт:
## Подключение к почтовому серверу ##
# Закомментировать, если требуется выполнить скрипт непосредственно на почтовом сервере #
$server = "MAIL"
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$server/PowerShell/ -Authentication Kerberos
Import-PSSession $session
## Добавить командлеты MS Exchange (использовать для работы на почтовом сервере) ##
# Раскомментировать, если требуется выполнить скрипт непосредственно на почтовом сервере #
# Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
## Отнять количество часов от текущего момента ##
# По умолчанию от текущего момента отнимается 12 часов #
$hours = -12 # <== Заменить на нужное количество часов
## Почта-получатель ##
$filtermail = "user@domain.ru" # <== Заменить на нужный адрес
## Путь для сохранения отчёта ##
# Путь по умолчанию - рабочий стол текущего пользователя #
$path = [Environment]::GetFolderPath("Desktop") + "\report.csv"
## Создание лога ##
Get-MessageTrackingLog -Start (Get-Date).AddHours($hours) -ResultSize unlimited |
where {[string]$_.recipients -like "$filtermail"} |
Sort-Object TimeStamp |
## Сохранение в файл ##
ft -AutoSize >> $path
Теперь попробуем конкретизировать запрос. Например, нужно вывести журнал с 1 декабря 2022 года и вплоть до конца суток 19 декабря:
## Подключение к почтовому серверу ##
# Закомментировать, если требуется выполнить скрипт непосредственно на почтовом сервере #
$server = "MAIL"
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$server/PowerShell/ -Authentication Kerberos
Import-PSSession $session
## Добавить командлеты MS Exchange (использовать для работы на почтовом сервере) ##
# Раскомментировать, если требуется выполнить скрипт непосредственно на почтовом сервере #
# Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
## Путь для сохранения отчёта ##
# Путь по умолчанию - рабочий стол текущего пользователя #
$path = [Environment]::GetFolderPath("Desktop") + "\report.csv"
## Дата/время начала отбора ##
$startdate = "12/01/2022 00:00:00" # <== ММ/ДД/ГГГГ ЧЧ:ММ:СС
## Дата/время окончания отбора ##
$enddate = "12/19/2022 23:59:59" # <== ММ/ДД/ГГГГ ЧЧ:ММ:СС
## Почта-получатель ##
$filtermail = "user@domain.ru" # <== Заменить на нужный адрес
## Создание лога ##
Get-MessageTrackingLog -Start "$startdate" -End "$enddate" -ResultSize unlimited |
where {[string]$_.recipients -like "$filtermail"} |
Sort-Object TimeStamp |
## Сохранение в файл ##
ft -AutoSize >> $path
Усложним запрос, указав адрес отправителя и адрес получателя. Временные рамки оставим такими же.
## Подключение к почтовому серверу ##
# Закомментировать, если требуется выполнить скрипт непосредственно на почтовом сервере #
$server = "MAIL"
$session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://$server/PowerShell/ -Authentication Kerberos
Import-PSSession $session
## Добавить командлеты MS Exchange (использовать для работы на почтовом сервере) ##
# Раскомментировать, если требуется выполнить скрипт непосредственно на почтовом сервере #
# Add-PSSnapin Microsoft.Exchange.Management.PowerShell.SnapIn
## Путь для сохранения отчёта ##
# Путь по умолчанию - рабочий стол текущего пользователя #
$path = [Environment]::GetFolderPath("Desktop") + "\report.csv"
## Дата/время начала отбора ##
$startdate = "12/01/2022 00:00:00" # <== ММ/ДД/ГГГГ ЧЧ:ММ:СС
## Дата/время окончания отбора ##
$enddate = "12/19/2022 23:59:59" # <== ММ/ДД/ГГГГ ЧЧ:ММ:СС
## Адрес отправителя ##
$sender = "sender@domain.ru" # <== Заменить на адрес отправителя
## Адрес получателя ##
$recipient = "recepient@domain.ru" # <== Заменить на адрес получателя
## Создание лога ##
Get-MessageTrackingLog -Sender "$sender" -Recipients "$recipient" -ResultSize unlimited -Start "$startdate" -End "$enddate" |
Sort-Object TimeStamp |
## Сохранение в файл ##
ft -AutoSize >> $path
Как я упоминал выше, на рабочем столе будет создан файл report.csv, который можно загрузить как табличные данные с колонками фиксированной ширины.
Тема логов почтового сервера была продолжена здесь.