Freitag, der 26. April 2024 - 09:54 Uhr

E-Mail Verkehr per Powershell überwachen

erstellt am: 02.02.2017 | von: DevLink | Kategorie(n): Exchange Server | Keine Kommentare

Nachdem wir jetzt wissen, wie man sich per Powershell auf Exchange Online verbindet und ein bisschen Infos anzeigen lässt, gehen wir mal eine Stufe weiter. Ich hatte die Überlegung unser Postfach in dem täglich die Backupmails ankommen auszulesen und entsprechend zu prüfen. Das überschneidet sich ein wenig mit den Monitoring Artikeln aber darauf gehe ich diesmal nicht explizit ein.

Sich die Mails aus einem Postfach anzeigen zu lassen ist bei einer lokalen Exchange installation nun nicht wirklich ein großes Problem. Entweder direkt das Postfach parsen oder die *.eml Dateien entsprechend absuchen lassen. Bei unserer Online Version wird es etwas schwieriger, vorallem da es sich nicht um Benutzerpostfächer handelt sondern um freigegebene Postfächer. Es ist also schlichtweg nicht möglich ohne Umwege die Postfächer zu parsen, also warum nicht gleich den ganzen Mailverkehr auslesen und entsprechend die Filter setzen?

Über das TechNet fiel dann der tolle Begriff "Get-MessageTrace". Also probieren wir das mal aus und lassen uns die 24h vom 01.02.17 bis 02.02.17 anzeigen:

Get-MessageTrace -StartDate "02/01/2017 08:00" -EndDate "02/02/2017 08:00" | Out-GridView

Jetzt öffnet sich ein separates Fenster, bei dem die Mails sortiert aufgelistet werden:

messagetrace

Jetzt kann man natürlich anfangen zu Filtern. Wir wollen jetzt natürlich erstmal die E-Mails anzeigen lassen, die nur an unser Backup Konto gingen. Dazu fügen wir folgenden Parameter an:

Get-MessageTrace -StartDate "02/01/2017 08:00" -EndDate "02/02/2017 08:00" -RecipientAddress "backup@company.com" | Out-GridView

Mit dem Parameter -SenderAddress "" kann auch explizit nach verschiedenen Backups gefiltert werden, wenn man zB. verschiedene Clients dafür hat, zB:

Get-MessageTrace -StartDate "02/01/2017 08:00" -EndDate "02/02/2017 08:00" -SenderAddress "backupserver1@company.com" -RecipientAddress "backup@company.com" | Out-GridView

Wollen wir nun nach dem Betreff filtern, ob ein Backup fehlgeschlagen ist können wir über die Pipe filtern:

Get-MessageTrace -StartDate "02/01/2017 08:00" -EndDate "02/02/2017 08:00" -RecipientAddress "backup@company.com" | Where {$_.Subject -like "*Fail*"} | Out-GridView

Mit diesen Informationen gibt es natürlich jede Menge Möglichkeiten die entsprechenden Parameter anzupassen, im folgenden habe ich mal ein Script, das entsprechend die Mails checkt und abzählt. Wer sich ein wenig auskennt, für den ist das Script selbsterklärend. Ursprünglich habe ich es für Icinga geschrieben, daher auch die Exit Codes, diese sind optional. Das Script an sich kann sich auch per Aufgabenplanung als .ps1 wunderbar ausführen lassen. Den Trigger dafür darf jeder gerne selbst setzen wie er möchte.

$dateEnd = get-date
$dateStart = $dateEnd.AddHours(-24)

$mailcount = @(Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -RecipientAddress "backup@company.com" | Where {$_.Subject -like "*Altaro*"})

$subject = @(Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -SenderAddress "backupserver1@company.com" -RecipientAddress "backup@company.com" | Where {$_.Subject -like "*Fail*"})

if ($mailcount.count -eq "0"){

write-host "WARNING: No Backups in the last 24 Hours!"  
exit 1

} elseif ($subject.count -ne "0"){

$failedmail = Get-MessageTrace -StartDate $dateStart -EndDate $dateEnd -SenderAddress "backupserver1@company.com" -RecipientAddress "backup@company.com" | Where {$_.Subject -like "*Fail*"} | select -ExpandProperty Subject

write-host "CRITICAL: [FAILED]" $failedmail 
exit 2

}

else {

write-host "OK:" $mailcount.count "Succeeded" and $subject.count "Failed Backups in the last 24 Hours" 
exit 0
}

Weitere Informationen gibt es unter folgendem Link:
https://blogs.technet.microsoft.com/eopfieldnotes/2014/12/16/message-trace-the-powershell-way/



, ,

Keine Kommentare


Bis jetzt noch keine Kommentare

Einen Kommentar abgeben

Themen:

54 Artikel in 6 Kategorien:

  • Exchange Server (16)
  • Linux (6)
  • Microsoft Server (6)
  • Scripting (3)
  • Tutorials (10)
  • Windows (13)