Entra / Microsoft 365 · Compliance & audit
Find Send and Search audit records
Search the unified audit log for Send, SharePoint search, and Exchange search operations, as used in Office 365 for IT Pros Chapter 21 examples.
Connect & set up
Run these once per session. All scopes are read-only unless the script makes changes.
Connect-ExchangeOnline
Run it
The main script. Copy it, or download the .ps1 and run it from your console.
param([int] $LookbackDays = 90,[string] $StartDate = (Get-Date).AddDays(-$LookbackDays); $EndDate = (Get-Date),[string] $EndDate = (Get-Date))$Records = Search-UnifiedAuditLog -StartDate $StartDate -EndDate $EndDate -ResultSize 5000 -Operations Send$Report = [System.Collections.Generic.List[Object]]::new() # Create output fileIf ($Records.count -gt 0) {ForEach ($Rec in $Records) {$AuditData = ConvertFrom-Json $Rec.AuditData$ReportLine = [PSCustomObject] @{TimeStamp = Get-Date($AuditData.CreationTime) -format gUser = $AuditData.MailboxOwnerUPNOperation = $AuditData.OperationSubject = $AuditData.Item.SubjectMessageId = $AuditData.Item.InternetMessageId }$Report.Add($ReportLine) }} # End if$Operations = "SearchQueryInitiatedSharePoint", "SearchQueryInitiatedExchange"$Records = Search-UnifiedAuditLog -StartDate $StartDate -EndDate $EndDate -ResultSize 5000 -Operations $Operations$Report = [System.Collections.Generic.List[Object]]::new() # Create output fileIf ($Records.count -gt 0) {ForEach ($Rec in $Records) {$AuditData = ConvertFrom-Json $Rec.AuditDataSwitch ($AuditData.Operation) {"SearchQueryInitiatedSharePoint" { # SharePoint search$ReportLine = [PSCustomObject] @{TimeStamp = Get-Date($AuditData.CreationTime) -format gUser = $AuditData.UserIdClient = $AuditData.QuerySourceSearch = $AuditData.QueryTextScenario = $AuditData.ScenarioName }$Report.Add($ReportLine) }"SearchQueryInitiatedExchange" { # Exchange search event$ReportLine = [PSCustomObject] @{TimeStamp = Get-Date($AuditData.CreationTime) -format gUser = $AuditData.UserIdClient = $AuditData.QuerySourceSearch = $AuditData.QueryTextScenario = $AuditData.ScenarioName }$Report.Add($ReportLine) }} # End Switch} # End For} # End if$Report | Format-Table TimeStamp, Client, Search, User
Parameters
ParameterDefaultNotes
-LookbackDays90Number of days back to search unified audit log records.-StartDate(Get-Date).AddDays(-90)Start of the audit log search window.-EndDate(Get-Date)End of the audit log search window.Attribution
Author
Office365itpros