Entra / Microsoft 365 · Compliance & audit
Report activity alert audit events
Search the unified audit log for SecurityComplianceAlerts records and report activity alert events.
Connect & set up
Run these once per session. All scopes are read-only unless the script makes changes.
Connect-ExchangeOnline -ShowBanner:$false
Run it
The main script. Copy it, or download the .ps1 and run it from your console.
param([int] $LookbackDays = 180)[array]$Modules = Get-Module | Select-Object -ExpandProperty NameIf ("ExchangeOnlineManagement" -notin $Modules) {Connect-ExchangeOnline -ShowBanner:$false}Write-Host "Searching for audit records"[array]$Records = (Search-UnifiedAuditLog -StartDate (Get-Date).AddDays(-$LookbackDays) -EndDate (Get-Date).AddDays(+1) -RecordType SecurityComplianceAlerts -Formatted -ResultSize 3000)If ($Records.Count -eq 0) {Write-Host "No alert audit records found."Break}Write-Host "Processing" $Records.Count "audit records..."$Report = [System.Collections.Generic.List[Object]]::new()ForEach ($Rec in $Records) {$AuditData = ConvertFrom-Json $Rec.Auditdata$Data = ConvertFrom-Json $Auditdata.dataIf ($Rec.Operations -eq "AlertTriggered") {$ReportLine = [PSCustomObject]@{TimeStamp = $Rec.CreationDateUser = $Data.f3uAction = $Data.anStatus = $AuditData.ResultStatusSeverity = $AuditData.SeverityWorkload = $AuditData.SourceOperation = $Rec.OperationsCategory = $AuditData.Category}$Report.Add($ReportLine)} Else {$ReportLine = [PSCustomObject]@{TimeStamp = $Rec.CreationDateUser = $Data.eidAction = $Data.lonStatus = $AuditData.ResultStatusSeverity = $AuditData.SeverityWorkload = $AuditData.SourceOperation = $Rec.OperationsCategory = $AuditData.Category}$Report.Add($ReportLine)}}$Report | Select-Object Timestamp, Action, Operation, User | Out-GridView
Parameters
ParameterDefaultNotes
-LookbackDays180Number of days back to search the unified audit log.Attribution
Author
Office365itpros