Exchange Server: Welche Transportregeln werden auf eine Mail angewendet?

Mittels Exchange Transportregeln können bestimmte Aktionen beim Empfangen oder Versenden von Mails durchgeführt werden. Mails lassen sich beispielsweise mit einer Transportregel umleiten, ablehnen oder mit meinem Disclaimer versehen. Die Möglichkeiten bestimmte AKtionen für Mails mittels Transportregeln umzusetzen sind vielseitig, bei vielen Transportregeln wird es allerdings schnell etwas unübersichtlich und es nicht immer unbedingt klar, welche Regel, wann ausgeführt wird. Wenn es nur wenige Transportregeln gibt, ist es ja noch einfach die Übersicht zu behalten, hier lässt sich schnell durchgehen und prüfen, welche Regeln noch relevant sind.

Exchange Server: Welche Transportregeln werden auf eine Mail angewendet?

Bei sehr vielen Regeln wird es aber schnell vorkommen, dass manche Regeln überflüssig sind und nicht mehr ausgeführt werden. Häufig tritt dies bei Mailumleitungen mittels Transportregel auf. Leider ist es nicht ganz trivial rauszufinden, welche Transportregel noch in Verwendung ist. Diese Informationen lassen sich nur recht versteckt aus den Message Tracking Logs ermitteln.

Als Beispiel kann der folgende Befehl verwendet werden, um aus den Message Trackings Logs zu ermitteln, welche Transportregeln auf eine Mail angewendet wurden:

Get-TransportService | Get-MessageTrackingLog -Start $Start -End $End -EventId AGENTINFO -ResultSize Unlimited | select timestamp,sender,eventid,recipients,eventdata -last 3| ft

Exchange Server: Welche Transportregeln werden auf eine Mail angewendet?

Im Feld Eventdata finden sich nun mehrere Angaben, unter anderem auch Informationen zu den Transportregeln. Mittels der im Feld “EventData” angegebenen “RuleID” lässt sich zumindest schon einmal die Transportregel ausfindig machen:

Get-TransportRule e1379b25-100c-4d83-b302-3b7856246474

Exchange Server: Welche Transportregeln werden auf eine Mail angewendet?

Eine kleine Hürde ist allerdings, dass es die Angabe einer RuleID innerhalb von EventData noch nicht heißen muss, dass die Transportregel auch ausgeführt wurde. Sichtbar wird dies, wenn man sich das komplette Feld “EventData” anschaut:

Get-TransportService | Get-MessageTrackingLog -Start $Start -End $End -EventId AGENTINFO -ResultSize Unlimited | select timestamp,sender,eventid,recipients,eventdata -last 3| ft eventdata

Message Tracking EventData

Im Screenshot sind wieder die 3 Mails zu sehen, alle 3 Mails haben zeigen mindestens eine RuleID im Feld EeventData an, jedoch wird nur bei der letzten Mail auch eine “Action” angezeigt. Wenn man sich nun das Feld “EventData” genau anschaut, erkannt man das auch der vorgestellte Wert “ETRP” und “ETR” unterschiedlich ist. Eine Transportregel wird also ausgeführt, wenn “ETR” (nicht “ETRP”) und zusätzlich auch eine “Action” innerhalb von EventData angegeben wird.

Etwas besser lesbar wird es, wenn man sich “Eventdata” zu einer bestimmten Mail anzeigen lässt:

(Get-TransportService | Get-MessageTrackingLog -Start $Start -End $End -EventId AGENTINFO -ResultSize Unlimited | select timestamp,sender,eventid,recipients,eventdata -last 1).eventdata

Message Tracking EventData

In dieser Übersicht lässt sich besser erkennen, welche Einträge innerhalb von “EventData” zueinander gehören. Zur Erinnerung, nur die Transportregel welche “ETR” und eine “Action” enthält wird ausgeführt, die anderen Regeln werden nicht angewendet.

Es ist also nicht ganz so einfach rauszufinden, welche Transportregeln in Verwendung sind und auf Mails angewendet werden. Ich habe daher mal ein kleines Script erstellt, um eine Übersicht zu erstellen, welche Transportregeln ausgeführt werden:

#Time Range for Searching Message Tracking Logs
$Start = (get-date).AddDays(-1)
$End = (get-date)

#Search MessageTracking Log in specified Timerange
$MessageTrackingLog = Get-TransportService | Get-MessageTrackingLog -Start $Start -End $End -EventId AGENTINFO -ResultSize Unlimited | select eventdata,MessageId
#Get all Mails where a Transport Rule was applied
$MailsWithTransportRules = $MessageTrackingLog.EventData | where {$_.key -eq "TRA" -and $_.Value.StartsWith("ETR|") -and $_.Value -match "action="}

#Get Transport Rule GUID from Mails with triggerd Transportrule
$TriggeredRules = @()
foreach ($MailWithTransportRule in $MailsWithTransportRules) {
 $TriggeredRules += $MailWithTransportRule.Value.Split("|")[1].Split("=")[1]
}
#Get All TransportRules
$AllTransportRules = Get-TransportRule -ResultSize unlimited

#Group Triggerd Rules and Count Trigger Count
$TriggeredRulesGroups = $TriggeredRules | group | select count,name

#Loop all TransportRules and check if it was triggerd
$TriggerdRulesOverview = @()
foreach ($TransportRule in $AllTransportRules) {
 $TransportRuleGUID = $TransportRule.Guid
 $TransportRuleName = $TransportRule.Name
 $TransportRuleState = $TransportRule.State
 $TransportRuleDescription = $TransportRule.Description
  #If Transport Rule was triggerd, update $TransportRuleCount, else set $TransportRuleCount to 0
  if ($TriggeredRulesGroups.Name -contains $TransportRuleGUID) {
   $TransportRuleCount = ($TriggeredRulesGroups | where {$_.Name -match $TransportRuleGUID}).Count
  }
  else {
   $TransportRuleCount = 0
  }
 $TriggerdRulesOverview += New-Object -TypeName psobject -Property @{RuleID="$TransportRuleGUID"; RuleName="$TransportRuleName"; RuleState="$TransportRuleState"; RuleDescription="$TransportRuleDescription"; RuleCount=$TransportRuleCount}
}

#Output Results
$TriggerdRulesOverview | ft RuleName,RuleCount,Rulestate,RuleID,RuleDescription

Das Script liefert eine Übersicht welche Transportrtegeln binnen des letzten Tages ausgeführt wurden:

Script zum Ermitteln der Transportregeln

Der Zeitraum ist mit der Variable “Start” in der ersten Zeile anpassbar. Mit einem größeren Zeitraum kann man somit schon mal etwas Licht in die Transportregeln bekommen. Somit bleiben dann hoffentlich nur noch wenige Regeln über, welche man dann manuell prüfen kann. Alternativ kann auch das Script recht einfach an die eigenen Anforderungen angepasst werden, um beispielswiese rauszufinden, auf welche Mails eine bestimmte Regel angewendet wurde.

2 Gedanken zu „Exchange Server: Welche Transportregeln werden auf eine Mail angewendet?“

  1. Hi,
    falls man die Nachricht zur Hand hat (ist nicht immer der Fall) hilft es auch – und das machen wir gerne: Jede Transportregel wird so konfiguriert, dass Sie einen Header einfügt und den Namen der Regel beinhaltet (Oder ein Kennzeichen). Damit sieht man das sehr schön, welche Regeln angewendet wurden.

    Antworten
  2. Hallo, das habe ich immer schon gesucht. Leider wirft das Skript bei mir nichts raus, auch nicht mit größerem Zeitraum.. obwohl täglich Regeln angewendet werden. Ich bräuchte da mal einen Tipp, was da falsch läuft.

    Antworten

Schreibe einen Kommentar