• Уважаемый посетитель! Рады приветствовать тебя на обновленном форуме. Большая часть рекламы(90%) видна только гостям. После регистрации она убирается. Спасибо за внимание.

Exchange Статистика по количеству отправленных и полученных писем

akhomlyuk

/etc/shadow
Сообщения
244
Симпатии
47
#1
Собираем статистику по количеству отправленных и принятых сообщений для конкретных пользователей или всей организации на примере Exchange 2013
image_2017-07-03_21-40-15.png

Вывод по дням в консоль:
3e26ef4dc5c8478994670d9363ab8a8c.jpg

Это конечно хорошо, но лучше генерировать красивый html отчет:
image_2017-07-03_21-49-00.png
C#:
#### Переменные #####
# период за который будем собирать статистику
$PeriodIndays = 5
# дата по которую собираем, должна быть меньше чем начальная
$EndPeriod = Get-date -hour 0 -minute 0 -second 0
$StartPeriod = ($EndPeriod).AddDays( -$PeriodIndays )
# путь до html файла, каталог должен быть создан с возможностью записи в него.
$PathFile = 'c:\reports\EmailStats.html'
####################################################################################
$From = $StartPeriod
$To = $EndPeriod

[Int64] $intSent = 0
[Int64] $intRec = 0
[Int64] $intSentSize = 0
[Int64] $intRecSize = 0
$Total = 0
$TotalSent = 0
$TotalRec  = 0

$MailPerDay = @()
Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010

Do {
    $From = $From.AddDays(1)
    $To = $From.AddDays(1)

    $intSent = $intRec = $intSentSize =  $intRecSize = 0

    (Get-TransportService) | Get-MessageTrackingLog -ResultSize Unlimited -Start $From -End $To -Recipients "vash@domain.ru"  | ForEach {
        # Sent E-mails
        If ($_.EventId -eq "RECEIVE" -and $_.Source -eq "STOREDRIVER")
        {
            $intSent++
            $intSentSize += $_.TotalBytes
        }
  
        # Received E-mails
        If ($_.EventId -eq "DELIVER")
        {
            $intRec++
            $intRecSize += $_.TotalBytes
        }
    }

    $props = [ordered]@{   Date=$From
                           Sent=$intSent
                           SentSizeMB=[Math]::Round($intSentSize/1MB, 0)
                           Recived=$intRec
                           RecivedSizeMB=[Math]::Round($intRecSize/1MB, 0)
                           TotalPerDayInMB=[Math]::Round(($intRecSize+$intSentSize)/1MB, 2)
                           TotalPerDayInGB=[Math]::Round(($intRecSize+$intSentSize)/1GB, 2)
                        }

    $obj = New-Object -TypeName PSObject -Property $props

    $MailPerDay += $obj

    $TotalSent += $intSentSize
    $TotalRec += $intRecSize
} While ($To -lt (Get-Date))

$MailPerDay | ft

Write-Host "всего отправлено за отчетный период $([Math]::Round( $TotalSent/1GB, 2)) гигабайт"
Write-Host "всего получено за отчетный период   $([Math]::Round(  $TotalRec/1GB, 2)) гигайбайт"
Write-Host "всего получено и отправлено за период $([Math]::Round( ($TotalSent + $TotalRec)/1GB, 2)) гигабайт"

############# Генерация HTML#############
$frag1 = $MailPerDay | sort -Property Date -Descending | ConvertTo-Html -As table -Fragment -PreContent "<h2>всего получено за период $([Math]::Round( $TotalSent/1GB, 2)) <br> всего отправлено за период $([Math]::Round(  $TotalRec/1GB, 2))<br>всего отправлено и получено за период $([Math]::Round( ($TotalSent + $TotalRec)/1GB, 2))</h2>" | Out-String

Write-Verbose 'definiting CSS'
$head = @'
<style>
body { background-color:#ffffff; font-family:Tahoma; font-size:12pt; }
td, th { border:1px solid black; border-collapse:collapse; }
th { color:white; background-color:black; }
table, tr, td, th { padding: 2px; margin: 0px }
table { font-family: "Lucida Sans Unicode", "Lucida Grande", Sans-Serif; font-size: 14px; border-radius: 10px; border-spacing: 0; text-align: center; }
th { background: #BCEBDD; color: white; text-shadow: 0 1px 1px #2D2020; padding: 10px 20px; }
th, td { border-style: solid; border-width: 0 1px 1px 0; border-color: white; }
th:first-child, td:first-child { text-align: left; }
th:first-child { border-top-left-radius: 10px; }
th:last-child { border-top-right-radius: 10px; border-right: none; }
td { padding: 10px 20px; background: #F8E391; }
tr:last-child td:first-child { border-radius: 0 0 0 10px; }
tr:last-child td:last-child { border-radius: 0 0 10px 0; }
tr td:last-child { border-right: none; }
</style>
'@

$Date = Get-Date
$rep = ConvertTo-HTML -head $head -PostContent $frag1 -PreContent "<h1>Email Stats $Date</h1>" | Out-String
$rep | Out-File $PathFile
В строке (Get-TransportService) | Get-MessageTrackingLog -ResultSize Unlimited -Start $From -End $To -Recipients "[EMAIL]vash@domain.ru[/EMAIL]" меняем на нужное -Recipients "vash@domain.ru" , либо удаляем, тогда соберется для всех ящиков в организации.
 
Последнее редактирование: