Ich bin im Script Explorer von Microsoft auf ein Skript gestoßen, welches den täglichen Durchsatz von gesendeten und empfangenen Emails anzeigt.

Das Ergebnis wird direkt in der Powershellkonsole angezeigt. Da dies sehr unübersichtlich ist, habe ich das Skript angepasst, um das Ergbnis wahlweise als csv, html oder per Email ausgeben zu lassen. Außerdem wurde ein Parameter implementiert, ab welchen Datum die Auswertung starten soll.

Beispielausgabe als HTML:

totalemail

Aufruf des Skripts:

./Totalemail.ps1 -startDate 20/05/2012 -HTML -email -csv

Für den Emailversand müssen folgenden Zeilen angepasst werden:

$sendAlertTo = “EmpfängerEmailAdresse”

$sendAlertFrom = “AbsenderEmailAdresse

$SMTPServer = “SMTP-Server”

Und hier nun das Skript:

# Initialize some variables used for counting and for output
param([string] $startDate = $(throw "Startdate is required"), [switch]$HTML, [switch]$email, [switch]$csv )
$From = Get-Date $startDate
$To = $From.AddDays(1) 

$sendAlertTo = "EmailEmpfänger"
$sendAlertFrom = "Emailabsender"
$SMTPServer = "SMTP-Server" 

$RptCollection = @()  

[Int64] $intSent = $intRec = 0
[Int64] $intSentSize = $intRecSize = 0
[String] $strEmails = $null 

Write-Host "DayOfWeek,Date,Sent,Sent Size,Received,Received Size" -ForegroundColor Yellow 

Do
{
	$rptObj = "" | select  DayOfWeek,Date,Sent,SentSize,Received,ReceivedSize
    # Start building the variable that will hold the information for the day
    $strEmails = "$($From.DayOfWeek),$($From.ToShortDateString()),"
 	$rptObj.DayOfWeek = $From.DayOfWeek
	$rptObj.Date = $From.ToShortDateString()

    $intSent = $intRec = 0
    (Get-TransportServer) | Get-MessageTrackingLog -ResultSize Unlimited -Start $From -End $To | 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
		}
    } 

	$intSentSize = [Math]::Round($intSentSize/1MB, 0)
	$intRecSize = [Math]::Round($intRecSize/1MB, 0)

 	$rptObj.Sent = $intSent
	$rptObj.SentSize = $intSentSize
	$rptObj.Received = $intRec
	$rptObj.ReceivedSize = $intRecSize

	$RptCollection +=$rptObj  

    # Add the numbers to the $strEmails variable and print the result for the day
    $strEmails += "$intSent,$intSentSize,$intRec,$intRecSize"
    $strEmails 

    # Increment the From and To by one day
    $From = $From.AddDays(1)
    $To = $From.AddDays(1)
}
While ($To -lt (Get-Date))
#While ($To -lt (Get-Date "01/12/2011"))

#if csv parameter is set, create csv file
if($csv)
{
	$RptCollection | Export-Csv -NoTypeInformation  c:\usageReport.csv
}

#Create new Object to build the html code
$sb = New-Object System.Text.StringBuilder

	$css = @'
	<style type="text/css">
	body { font-family: Tahoma, Geneva, Verdana, sans-serif;}
	table {border-collapse: separate; background-color: #F2F2F2; border: 3px solid #103E69; caption-side: bottom;}
	td { border:1px solid #103E69; margin: 3px; padding: 3px; vertical-align: top; color: #000;font-size: 12px;}
	thead th {background: #903; color:#fefdcf; text-align: left; font-weight: bold; padding: 3px;border: 1px solid #990033;}
	th {border:1px solid #CC9933; padding: 3px;}
	tbody th:hover {background-color: #fefdcf;}
	th a:link, th a:visited {color:#903; font-weight: normal; text-decoration: none; border-bottom:1px dotted #c93;}
	caption {background: #903; color:#fcee9e; padding: 4px 0; text-align: center; width: 40%; font-weight: bold;}
	tbody td a:link {color: #903;}
	tbody td a:visited {color:#633;}
	tbody td a:hover {color:#000; text-decoration: none;
	}
	</style>
'@	

		[void]$sb.AppendLine($css)
		[void]$sb.AppendLine("<table cellspacing='0'>")
		[void]$sb.AppendLine("<tr><td colspan='6' bgcolor=`"#F2F2F2`"><strong>Mailbox Auslastung am $((get-date).ToShortDateString())</strong></td></tr>")
		[void]$sb.AppendLine("<tr>")
		[void]$sb.AppendLine("<td><strong>DayOfWeek</strong></td>")
		[void]$sb.AppendLine("<td><strong>Date</strong></td>")
		[void]$sb.AppendLine("<td><strong>Sent</strong></td>")
		[void]$sb.AppendLine("<td><strong>SentSize</strong></td>")
		[void]$sb.AppendLine("<td><strong>Received</strong></td>")
		[void]$sb.AppendLine("<td><strong>ReceivedSize</strong></td>")
		[void]$sb.AppendLine("</tr>")

		$RptCollection | ForEach-Object{

			[void]$sb.AppendLine("<tr>")
			[void]$sb.AppendLine("<td>$($_.DayOfWeek)</td>")
			[void]$sb.AppendLine("<td>$($_.Date)</td>")
			[void]$sb.AppendLine("<td>$($_.Sent) items</td>")
			[void]$sb.AppendLine("<td>$($_.SentSize) MB</td>")
			[void]$sb.AppendLine("<td>$($_.Received) items</td>")
			[void]$sb.AppendLine("<td>$($_.ReceivedSize) MB</td>")
			[void]$sb.AppendLine("</tr>")

		}

	[void]$sb.AppendLine("</table>")
	#Write-Output $sb.ToString()

#if html parameter is set, create html file
if($HTML)
{
	$sb.ToString() | out-file "C:\report.htm"
	Invoke-Expression "C:\report.htm"
}

#if email parameter is set, create email notification
if($email)
{
	$SmtpClient = new-object system.net.mail.smtpClient
	$SmtpClient.host =  $SMTPServer
	$MailMessage = new-object System.Net.Mail.MailMessage
	$MailMessage.To.Add($sendAlertTo)
	$MailMessage.From = $sendAlertFrom
	$MailMessage.Subject = "Exchange Daily Send/Receive - Status"
	$MailMessage.IsBodyHtml = $TRUE
	$MailMessage.body = $sb.ToString()
	$SMTPClient.Send($MailMessage)
}

Wenn dir dieser Artikel gefallen hat, kannst du ihn mit einem Klick auf die folgenden Buttons weiterempfehlen. Möchtest du in Zukunft keine neuen Beiträge mehr verpassen? Dann abonniere doch den RSS Feed dieses Blogs. Vielen Dank!

Kommentar abgeben

Current month ye@r day *