Exchange 2010'da gelen-giden posta sayılarını bulmak

Exchange 2010’da gelen ve giden e-posta sayıları (toplam, ortalama boyut, en büyük posta) nasıl bulunur? PowerShell Message Tracking Log’larını kullanarak özel istatistik raporu (mailstatistics.ps1 scripti) oluşturma ve e-posta ile gönderme rehberi.

📧 Exchange 2010: Power Shell ile Gelen-Giden Posta Sayılarını Bulma

Microsoft Exchange’de, özellikle eski sürümlerde (Exchange 2010), gelen-giden e-posta istatistiklerini gösteren bir raporlama bölümünün eksikliği hissedilir. Neyse ki, bu tür raporlama isteklerini **PowerShell** ile kolayca yerine getirebiliriz.


Adım 1: Klasör Oluşturma ve Scripti Kaydetme

İlk olarak, Exchange sunucunuzun C:\ dizininde **stats** adında bir klasör oluşturun. Ardından, aşağıdaki PowerShell scriptini kopyalayıp bu klasör içine **mailstatistics.ps1** adıyla kaydedin.

Script içinde, alt satırlarda yer alan e-posta adreslerini ([email protected] ve [email protected]) istatistiğin gönderileceği kendi mail adreslerinizle değiştirmeyi unutmayın.

mailstatistics.ps1 (Script İçeriği):

$Localhost = $env:COMPUTERNAME
#Load Exchange PS Snapin
If ((Get-PSSnapin | Where-Object {$_.Name -eq "Microsoft.Exchange.Management.PowerShell.E2010"} ).name -eq 'Microsoft.Exchange.Management.PowerShell.E2010')
{
Write-Host "Exchange eklentisi zaten yuklu...."
}

else
{
Write-Host "Exchange Eklentisi Yukleniyor Lutfen Bekleyin...."; Add-PSSnapin Microsoft.Exchange.Management.PowerShell.E2010
}
Write-Host "calisiyor..."

$hubs = Get-TransportServer

# Get the start date for the tracking log search
$Start = (Get-Date -Hour 00 -Minute 00 -Second 00).AddDays(-1)

# Get the end date for the tracking log search
$End = (Get-Date -Hour 23 -Minute 59 -Second 59).AddDays(-1)

$Datum = $Start.ToShortDateString()

$receive = $hubs | get-messagetrackinglog -Start $Start -End $End -EventID "RECEIVE" -ResultSize Unlimited | select Sender,RecipientCount,TotalBytes,Recipients
$send = $hubs | get-messagetrackinglog -Start $Start -End $End -EventID "SEND" -ResultSize Unlimited | select Sender,RecipientCount,TotalBytes
$mreceive = $receive | Measure-Object TotalBytes -maximum -minimum -average -sum
$msend = $send | Measure-Object TotalBytes -maximum -minimum -average -sum

$anzahl = $mreceive.count + $msend.count
$volumen = ($mreceive.sum + $msend.sum) / (1024 * 1024)

$volumen = "{0:N2}" -f $volumen + " MB"

$msendmb = $msend.sum / (1024 * 1024)
$vsend = "{0:N2}" -f $msendmb + " MB"
$bigsend = $msend.maximum / (1024 * 1024)
$avsend = $msend.average / 1024

$bigsendmb = "{0:N2}" -f $bigsend + " MB"
$avsendkb = "{0:N2}" -f $avsend + " KB"

$mreceivemb = $mreceive.sum / (1024 * 1024)
$vreceive = "{0:N2}" -f $mreceivemb + " MB"
$bigreceive = $mreceive.maximum / (1024 * 1024)
$avreceive = $mreceive.average / 1024

$bigreceivemb = "{0:N2}" -f $bigreceive + " MB"
$avreceivekb = "{0:N2}" -f $avreceive + " KB"

$computer = gc env:computername
$obj = new-object psObject

$obj |Add-Member -MemberType noteproperty -Name "Sunucu................................. " -Value $Computer
$obj |Add-Member -MemberType noteproperty -Name "Tarih.................................. " -Value $Datum
$obj |Add-Member -MemberType noteproperty -Name "Gonderilen eposta...................... " -Value $msend.Count
$obj |Add-Member -MemberType noteproperty -Name "Gonderilen posta toplam buyuklugu...... " -Value $vsend
$obj |Add-Member -MemberType noteproperty -Name "Gonderilen en buyuk posta buyuklugu.... " -value $bigsendmb
$obj |Add-Member -MemberType noteproperty -Name "Gonderilen eposta ortalamasi........... " -value $avsendkb
$obj |Add-Member -MemberType noteproperty -Name "Gelen eposta sayisi.................... " -Value $mreceive.Count
$obj |Add-Member -MemberType noteproperty -Name "Gelen eposta toplam buyuklgu........... " -Value $vreceive
$obj |Add-Member -MemberType noteproperty -Name "Gelen en buyuk eposta.................. " -value $bigreceivemb
$obj |Add-Member -MemberType noteproperty -Name "Gelen eposta ortalamasi................ " -value $avreceivekb
$obj |Add-Member -MemberType noteproperty -Name "Toplam eposta (gelen-giden)............ " -Value $anzahl
$obj |Add-Member -MemberType noteproperty -Name "Toplam eposta buyuklugu (gelen-giden).. " -Value $volumen

$out = $Datum + ";" + $msend.count + ";" + $vsend + ";" + $mreceive.count + ";" + $vreceive + ";" + $anzahl + ";" + $volumen
$out | out-file c:statsdaily.csv -append -encoding default

function sendmail($body)
{
$SmtpClient = new-object system.net.mail.smtpClient
$MailMessage = New-Object system.net.mail.mailmessage
$SmtpClient.Host = "smtp.doganburda.com"
$mailmessage.from = "[email protected]"
$mailmessage.To.add("[email protected]")
$mailmessage.To.add("[email protected]")
$mailmessage.Subject = “Exchange daily message Report $Datum”
$MailMessage.IsBodyHtml = $false
$mailmessage.Body = $body

$smtpclient.Send($mailmessage)
}

$obj = $obj -replace("@{","")
$obj = $obj -replace("=",":`t")
$obj = $obj -replace("; ","`n")
$obj = $obj -replace("}","`n")

sendmail $obj

Adım 2: Script’i Çalıştırma

Script’i çalıştırmak için **Exchange Management Shell**’i açın ve aşağıdaki komutu girin:

c:\stats\mailstatistics.ps1

Script çalıştığında:

  1. Exchange eklentisini yükleyecek (gerekirse).
  2. Dün’e ait (komutun çalıştırıldığı günden bir önceki gün) gelen ve giden posta verilerini (Message Tracking Log’larından) çekecektir.
  3. İstatistikleri formatlayarak belirlediğiniz e-posta adreslerine gönderecektir.
  4. Ayrıca C:\stats\daily.csv dosyasına CSV formatında ekleyecektir.

Bu script sayesinde artık gelen-giden posta raporlarınızı kolayca alabilir, hatta bu komutu bir zamanlanmış görev (Scheduled Task) olarak ayarlayarak otomatik raporlama yapabilirsiniz.