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:
- Exchange eklentisini yükleyecek (gerekirse).
- 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.
- İstatistikleri formatlayarak belirlediğiniz e-posta adreslerine gönderecektir.
- Ayrıca
C:\stats\daily.csvdosyası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.
