Exchange Online Protection: Get Quarantine Statistics

Hallo zusammen,

In der letzten Woche habe ich bei einem grossen Kunden die Migration auf Exchange Online Protection durchgeführt. Könnt ihr sagen, wann die MX Records umgestellt wurden?

Um das obenstehende Script zu erstellen, musste ich ein bisschen Gehirnschmalz einfliessen lassen.

Ich nutze das Get-QuarantineMessage cmdlet. Das cmdlet enthält eine "Pagesize", welches maximal 1000 Elemente zurückliefert und ein "Page" Attribut. Ausserdem nutze ich die "StartReceivedDate" und "EndReceivedDate" Parameter.

Get-QuarantineMessage

https://docs.microsoft.com/en-us/powershell/module/exchange/get-quarantinemessage?view=exchange-ps

$Quarantine = Get-QuarantineMessage -PageSize 1000 -StartReceivedDate "07/07/2021 00:00:00" -EndReceivedDate "07/07/2021 23:59:00" -Page 1

$Quarantine.Count

Es scheint also mehr als 1000 Einträge zu geben, also erhöhe ich den Page Parameter

$Quarantine = Get-QuarantineMessage -PageSize 1000 -StartReceivedDate "07/07/2021 00:00:00" -EndReceivedDate "07/07/2021 23:59:00" -Page 1

$Quarantine.Count

$Quarantine = Get-QuarantineMessage -PageSize 1000 -StartReceivedDate "07/07/2021 00:00:00" -EndReceivedDate "07/07/2021 23:59:00" -Page 2

$Quarantine.Count

$Quarantine = Get-QuarantineMessage -PageSize 1000 -StartReceivedDate "07/07/2021 00:00:00" -EndReceivedDate "07/07/2021 23:59:00" -Page 3

$Quarantine.Count

Nun schaue ich mir so eine Message genauer an. Dort gibt es ein "Released" Attribut.

$Quarantine[0] | fl

Ich kann also die Messages zählen, welche released wurden

 $Released = $Quarantine | where {$_.Released -eq $true}
 $ReleasedCount = $ReleasedCount + $Released.Count

Hier nun das ganze Script

###############################################################################
# Get-EOPQuarantineStatistics.ps1
# Get Quarantine Mails from EOP Quarantine
# Count Mails and Released Mails
# FalsePositive Precentage = 100 / MailsInQuarantine * ReleasedMails
# V1.0 09.07.2021 - Andres Bohren - Initial Version
###############################################################################

#Get Date
$InputDate = Read-Host "Quarantine Statistics from Day dd.mm.yyyy?"

$StartDate = [datetime]::parseexact($InputDate , "dd.MM.yyyy",$null)
$EndDate = $StartDate.AddMinutes(1440)
Write-Host "Searching Quarantine from $StartDate to $EndDate"

#Initialize Variables
$Page = 0
$QuarantineCount = 0
$ReleasedCount = 0
$MoreAvailable = $true

while ($MoreAvailable -eq $true) {
 $PAge = $Page + 1
 $Quarantine = Get-QuarantineMessage -PageSize 1000 -StartReceivedDate $StartDate -EndReceivedDate $EndDate -Page $Page
 $QuarantineCount = $QuarantineCount + $Quarantine.Count 
 
 If ($Quarantine.Count -lt 1000)
 {
  $MoreAvailable = $false
 }
 
 $Released = $Quarantine | where {$_.Released -eq $true}
 $ReleasedCount = $ReleasedCount + $Released.Count 
}
Write-Host "QuarantineCount: $QuarantineCount"
Write-Host "ReleasedCount: $ReleasedCount"
Write-Host "FalsePositive: " ("{0:N2}" -f (100/$QuarantineCount*$ReleasedCount))"%"

Grüsse
Andres Bohren