Microsoft her yeni sürümle kullanıcıların istekleri doğrultusunda eksikliklerini gidermeye çalışıyor fakat bence bunda çok da fazla gayretli çalışmalar yaptıklarını düşünmüyorum. Zira iş ortakları bu eksiklikler için yazılımlar üretiyor, açıkları kapanıyor.
Geçtiğimiz sürümlerde; Exchange 5.5, Exchange 2003’de eksikliğ hissedilen Disclaimer meselesi Exchange 2007’de giderildi ve artık yeni çıkan sürümlerde de devam ettiriliyor. Ancak tam istenildiği gibi mi derseniz, bence değil.. Neyse şuanda konumuz bu değil.
Konuya buradan başlayarak yine Exchange 2010’da eksikliği duyulan istatistik sisteminden bahsetmek istiyorum. Bence Exchange Management Console’da Reporting diye bir bölüm olmalı ve burada gelen-giden maillerin istatistikleri tutulmalı. Örneğin bir kullanıcı belirli bir tarih aralığında kaç e.posta aldı, kaç e.posta gönderdi gibi. Veya en çok e.posta gönderen veya en çok e.posta alan kullanıcıları -top 10 listesi- gibi bir raporlama bölümü olmalı..
Bugün direktörümüz “Bana günde kaç e.posta gönderip aldığımızın raporunu ver” dedi. İşte yukarda belirttiğim gibi bir raporlama bölümü olmadığı için bunu yapmanın yollarını araştırmaya başladım. Ve evet hakkını yememek lazım ki, Exchange 2007 ile beraber -aslında Windows 2008’de standart olarak- Power Shell adını verdikleri bir sistemle konsolda bulunmayan bazı istekleri yerine getirebiliyor.
Exchange 2010’da gelen-giden posta sayılarını bulmak
İlk olarak Exchange sunucunuzda stats adında bir klasör oluşturun. Bu klasör içine ise aşağıdaki script’i kopyalayıp mailstatistics.ps1 adıyla kaydedin. Script içinde alt satırlarda adiniz@domain.com olan satirlari istatistiğin gönderileceği mail adreslerle değiştirip kaydedin.
Şimdi sıra geldi script’i çalıştırmaya. Giriş yazımızdan da anlaşılacağı gibi bunu Exchange Management Shell ile yapacağız. Exchange Management Shell’i açıp aşağıdaki komutu girin.
c:statsmailstatistics.ps1
mailstatistics.ps1
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”
#$senders = $send | Group-Object Sender | Sort-Object Count -Descending
#$topsender = $senders[0].Name
#$topsender += $senders[0].Count
#$receivers = $receive | Group-Object Recipients | Sort-Object Count -Descending
#$topreceiver = $receivers[0]
#$topreceiver
$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 = “Exchange_2010_NoReply@doganburda.com”
$mailmessage.To.add(“hakki.ozer@doganburda.com”)
$mailmessage.To.add(“ccakar@doganburda.com”)
$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
arkadaş bu kadar uğraşmaya lüzum yok ki,
get-messagetrackinglog -resultsize unlimited –reventid "receive" -start "2/21/2013 1:00:00 PM" -End "2/28/2013 1:00:00" >c:receives.csv
kodunu yazsan tarih aralığındaki o CAS'tan geçen tüm receiveleri bulur. receive yerine send de yazarak gönderilenleri bulursun.