Hallo Newsgroup,
ich habe mir vorgenommen, die Mails unserer Exchangeserver etwas genauer zu zaehlen.
Es gibt ja viele Ansaetze - exchangeserverpro , get-cmd - u.s.w., die durchaus hilfreich sind.
Bei uns wird aber sehr viel automatisiert versendet und da haut das dann nicht so ganz hin.
Um etwas genauer zu werden, habe ich das folgende Script erstellt.
Meine Bitte:
Koennt ihr mit eurem KnowHow einmal ueber das Script gucken und auf grob fahrlaessige Unkorrektheiten pruefen?
Teile des Scripts (speichern in einer SQL-Tabelle, Topmailer auflisten) habe ich weggelassen - bei Interesse kann ich das aber nachreichen...
Danke schon mal im Voraus und ein schoenes Wochenende...
Detlef
Code
$AcceptedDomains = "" ; Get-AcceptedDomain | foreach {$AcceptedDomains += "@" + $_.DomainName + " "}
$a = New-Object System.Collections.ArrayList
(Get-TransportServer) | foreach { # $Start = Vortag 00:00:00
Get-MessageTrackingLog -ResultSize unlimited -Server $_ -Start $Start -End $Start.AddMinutes(1440) | foreach { [void] $a.add($_) }
}
[Int64] $sumSend = $sumSendInt = $sumSendExt = $cntSend = $cntSendInt = $cntSendExt = 0
[Int64] $sumRece = $sumReceInt = $sumReceExt = $cntRece = $cntReceInt = $cntReceExt = 0
$a | foreach {
$e = $_
$SourceEvent = $_.Source + "-" + $_.EventID
switch ($SourceEvent) {
"STOREDRIVER-DELIVER" { # zugestellte Mail an interne(n) Empfaenger
# es gibt bei der Zustellung an interne Empfaenger unter Umstaenden mehrere Saetze "STOREDRIVER-DELIVER"
# z.B. wenn sich die Empfaenger in unterschiedlichen Datenbanken befinden
$cntRece += $e.RecipientCount
$sumRece += ($e.RecipientCount * $e.TotalBytes)
if ($AcceptedDomains -match "@" + $e.Sender.Split("@")[1]) { # der Absender ist intern
$cntReceInt += $e.RecipientCount
$sumReceInt += ($e.RecipientCount * $e.TotalBytes)
} else { # der Absender ist extern
$cntReceExt += $e.RecipientCount
$sumReceExt += ($e.RecipientCount * $e.TotalBytes)
}
$e.Recipients | foreach { AddHashtable "R" $_ }
}
"SMTP-SEND" { # an externe(n) Empfaenger gesendete Mail
# Multiplikation mit $e.RecipientCount ist hier falsch, da der Exchangeserver die Mails an eine externe Maildomain zusammenfasst und auf einen Ruck los wird
# gibt es mehrere Maildomains, gibt es mehrere Saetze "SMTP-SEND"
# versenden von Mails durch Scripte/Webseiten nach extern -> "SMTP-SEND"
$cntSend += 1
$sumSend += $e.TotalBytes
$cntSendExt += 1
$sumSendExt += $e.TotalBytes
AddHashtable "S" $e.Sender
}
"STOREDRIVER-RECEIVE" { # von internem Absender gesendete Mail
# die Zustellung an externe wird bereits korrekt gemessen -> "SMTP-SEND"
# eine gesendete Mail wird im Ordner 'Gesendete Objekte' gespeichert, also: $sumSend += $e.TotalBytes
# die Empfaenger durchlaufen, um nach extern / intern zu trennen
$bIntern = $bExtern = $False
$e.Recipients | foreach { if ($AcceptedDomains -match "@" + $e.Sender.Split("@")[1]) { $bIntern = $True } else { $bExtern = $True } }
if ($bIntern -eq $True) { # Mail wurde nach intern versandt
$cntSend += 1
$sumSend += $e.TotalBytes
$cntSendInt += 1
$sumSendInt += $e.TotalBytes
}
if ($bExtern -eq $True) { # Mail wurde nach extern versandt
$sumSendExt += $e.TotalBytes
}
AddHashtable "S" $e.Sender
}
}
}
Alles anzeigen