Компания Microsoft со своими серверными продуктами чаще всего не поставляет красивых средств визуализации и просмотра статистики, отдавая это на откуп другим производителям программного обеспечения. Microsoft Exchange Server в этом не исключение, однако компания Microsoft предоставила удобный инструмент для сбора такой статистики. И тут уже сам администратор (или по запросу бизнеса) решает в каком разрезе получать статистику.
Если исходить из того, с чем приходилось сталкиваться, то наиболее частый запрос от бизнеса, это предоставить отчет по статистике использования почтовой системы, например: «предоставьте статистику по количеству отправленных и полученных писем для следующего списка адресов.» и далее список почтовыя ящиков.
Основная командлет который потребуется использовать в скрипте это Get-MessageTrackingLog, именно этот скрипт считывает транспортные логи и возвращает их в массив данных для дальнейшего разбора.
Ниже приведен пример скрипта, который может получить такую статистику по отправленным/полученнным письмам для конкретного ящика или группы ящиков с разбивкой на дни. Для работы скрипта требуется присвоить значение трем переменным, которые исходя из требуемого результата:
- $FQDNExchange — URL ссылка к вашему Exchange серверу, сыылка обычно имеет подобный вид: http://mbx01.contoso.com/PowerShell/
- $Listmailbox — список почтовых ящиков, для которых необходимо получить статистику
- $DaysBack — количество дней назад, за которые надо получить статистику, если значение 0, то статистика только за сегодня, если 1 — то за вчера и сегодня
$FQDNExchange = "http://mbx01.contoso.com/PowerShell/" #URI your Exhchange server
$Listmailbox = @("User1", "User2") # List User
$DaysBack =1 # Number of Back days for get statistics, 0 - only today
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri $FQDNExchange -Authentication Kerberos
$output = Import-PSSession $Session -AllowClobber -DisableNameChecking -WarningAction silentlycontinue
$rundate = $(Get-Date).toshortdatestring()
$ListExchange = Get-TransportServer -WarningAction silentlycontinue # Get list Exchange Transport Servers
for ($DaysToGoBack = $DaysBack; $DaysToGoBack -ge 0; $DaysToGoBack--)
{
foreach ($mailboxitem in $Listmailbox)
{
$mailbox = get-mailbox $mailboxitem
$StartDate = Get-date ([datetime]((Get-Date $rundate).adddays(-$DaysToGoBack)))
$StartDateString = (get-Date ($StartDate) -uformat "%H:%M:%S %m/%d/%Y").ToString()
$EndDate = Get-date (((Get-Date $StartDate).AddSeconds(86399)))
$EndDateString = (get-Date ($EndDate) -uformat "%H:%M:%S %m/%d/%Y").ToString()
$ListMessageSend =@()
$ListMessageReceive =@()
foreach ($server in $ListExchange)
{
$ListMessageSend += Get-MessageTrackingLog -Server $server.Name -Sender $mailbox.WindowsEmailAddress -Start $StartDateString -End $EndDateString -EventID "DELIVER" -resultsize unlimited
$ListMessageReceive += Get-MessageTrackingLog -Server $server.Name -Recipients $mailbox.WindowsEmailAddress -Start $StartDateString -End $EndDateString -EventID "RECEIVE" -resultsize unlimited
}
$TotalSend = $ListMessageSend | Measure-Object -Property Totalbytes -Sum # Sum size of mail sent per day per mailbox
$TotalReceive = $ListMessageReceive | Measure-Object -Property Totalbytes -Sum # Sum size of mail receive per day per mailbox
# Output: Date; Alias; NumberofMailReceived; SizeofMailReceived; NumberofMailSend; SizeofMailSent
$StartDate.ToShortDateString() + ";" + $mailbox.Alias + ";" + $TotalReceive.Count + ";" + [math]::Round(($TotalReceive.Sum)/(1024*1024)) + ";" + $TotalSend.Count + ";" + [math]::Round(($TotalSend.Sum)/(1024*1024))
}
}
Remove-PSSession $Session
Результа выполнения скрипта будет выведен на экран и состоять из 6 полей с разделителем точка с запятой:
Дата; Алиас пользователя; Количество полученных писем; общий размер полученных писем в МБ; количество отправленных писем; общий размер отправленных писем в МБ
Например так:
20.08.2018;User1;27;5;6;1 20.08.2018;User2;7;1;7;2 21.08.2018;User1;37;10;16;6 21.08.2018;User2;10;2;1;1
Данный скрипт проверен на версиях Microsoft Exchange 2010, 2013 и 2016, на Exchange Server 2007, к сожалению нет возможности проверить.
Для удобства текст скрипта можно скачать ввиде файла .ps1 или .zip:
mailboxStatisticsEx201x.ps1 (2,2 КиБ, 923 hits)
mailboxStatisticsEx201x.zip (1,1 КиБ, 350 hits)
Добрый день, спасибо за скрипт. А как вывести результат в csv?
Тут или создавать типизированный массив, или самое простое выводить результат в файл при помощи команды Out-File result.csv -Append.
Например, так:
$StartDate.ToShortDateString() + «;» + $mailbox.Alias + «;» + $TotalReceive.Count + «;» + [math]::Round(($TotalReceive.Sum)/(10241024)) + «;» + $TotalSend.Count + «;» + [math]::Round(($TotalSend.Sum)/(10241024)) | Out-File result.csv -Append
Спасибо, добрый Человек )