Exchange Online MessageTrace - How i created my own PowerShell Module

Hallo zusammen,

Jeder Exchange Online Admin verbringt hie und da Zeit mit Message Traces. Dabei gibt es ein paar Tricks, welche ich euch hier zeigen möchte. Zum Schluss habe ich das ganze dann in ein eigenes PowerShell Modul gepackt und auf der PowerShell Gallery veröffentlicht.

Ich mache ein Messagetrace der letzten 10 Tage (das ist das maximum) und lasse mir die Resultate anzeigen

$MT = Get-MessageTrace -StartDate (get-date).AddDays(-10) -EndDate (get-date) -SenderAddress andres.bohren@gmail.com

$MT | Format-Table Received, SenderAddress, RecipientAddress, Subject, Status, MessageTraceID

Ich schnappe mir eine MessageTraceID von einer Mail, welche in die Quarantäne verschoben wurde

$MTD = Get-MessageTraceDetail -MessageTraceId 5b018c12-df4a-4300-df60-08d90bca587d -RecipientAddress a.bohren@icewolf.ch -StartDate (get-date).AddDays(-10) -EndDate (get-date)

$MTD

Nun picke ich mir das "Spam" event heraus. Wie man sieht, hat das ein XML Format.

$Spam = $MTD | where {$_.Event -eq "Spam"}

$Spam | fl

Dieses XML lässt sich extrahieren

[xml]$xmlS = $Spam.Data

$xmls.root.MEP | fl

Aus dem ganzen habe ich mir ein eigenes PowerShell Modul geschrieben. Ein PowerShell Modul besteht aus einem Ordner (der Name des PowerShell Moduls) und einem Script Module *.psm1 und einem Module Manifest *.psd1

Writing a Windows PowerShell Module

https://docs.microsoft.com/en-us/powershell/scripting/developer/module/writing-a-windows-powershell-module?view=powershell-7.1

 

How to write a PowerShell module manifest

https://docs.microsoft.com/en-us/powershell/scripting/developer/module/how-to-write-a-powershell-module-manifest?view=powershell-7.1

 

Ein Manifest kann man sich mit folgendem Befehl anlegen

New-ModuleManifest -Path C:\myModuleName.psd1 -ModuleVersion "2.0" -Author "YourNameHere"

Im Manifest legt man Version und einige andere Dinge fest, wie zum Beispiel, welche Funktionen exportiert (sprich für den Anwender aufrufbar) gemacht werden sollen.

Anschliesend habe ich mir auf der PowerShell Gallery ein Konto eröffnet und einen API Key generiert

Publish-Module -Name Icewolf.EXO.SpamAnalyze -NuGetApiKey <YourPsGalleryApiKey>

  Wie man sieht ist das Modul lokal nicht installiert. Das kann mit dem Befehl "Get-Module" überprüft werden. Sucht man mit "Find-Module" in der PowerShell Gallery wird man fündig und kann das Modul mit "Install-Module" installieren

Get-Module Icewolf.EXO.SpamAnalyze -ListAvailable

Find-Module Icewolf.EXO.SpamAnalyze

Install-Module Icewolf.EXO.SpamAnalyze

Die Commands vom Module kann man sich mit folgendem Befehl anzeigen lassen

 

Get-Command -Module Icewolf.EXO.SpamAnalyze

 

Die integrierte Hilfe der PowerShell kann man sich mit folgendem Befehl anzeigen lassen

 

Get-Help Invoke-SpamAnalyze -Full

Und so sieht dann die Anwendung des Moduls aus. Das Modul sucht automatisch in den letzten 10 Tagen.

Import-Module Icewolf.EXO.SpamAnalyze
Invoke-SpamAnalyze -RecipientAddress <RecipientAddress> -SenderAddress <SenderAddress>

Nun kann man sich eine Message Trace ID kopieren um ein Mail genauer zu untersuchen.

Nun werden verschiedene Dinge geprüft wie:

  • Ist der Absender in der globalen Allow/Blocklist
  • Ist die Absender Domain in der globalen Allow/Blocklist

Grüsse
Andres Bohren