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))"%"