Entra / Microsoft 365 · Compliance & audit
Report audit recs file updates
Example of using audit records to find out who changed a file.
Connect & set up
Run these once per session. All scopes are read-only unless the script makes changes.
Connect-ExchangeOnline -SkipLoadingCmdletHelp
Run it
The main script. Copy it, or download the .ps1 and run it from your console.
param([int] $LookbackDays = 180)$Modules = Get-Module | Select-Object -ExpandProperty NameIf ("ExchangeOnlineManagement" -notin $Modules) {Write-Host "Loading Exchange Online Management module"Connect-ExchangeOnline -SkipLoadingCmdletHelp}$FileName = (Read-Host "Enter file name to search")[array]$Records = Search-UnifiedAuditLog -Operations FileModified, FileAccessed, FileUploaded `-ObjectIds $FileName -ResultSize 5000 -StartDate (Get-Date).AddDays(-$LookbackDays) -EndDate (Get-Date).AddDays(+1) `-SessionCommand ReturnLargeSetIf ($Records.Count -eq 0) {Write-Host "No audit records found for file names beginning with" $FileNameBreak}# Remove any duplicates$Records = $Records | Sort-Object Identity -Unique | Sort-Object { $_.CreationDate -as [datetime]} -DescendingWrite-Host ("Processing {0} audit records..." -f $Records.Count)$Report = [System.Collections.Generic.List[Object]]::new()ForEach ($Rec in $Records) {$AuditData = ConvertFrom-Json $Rec.Auditdata$ReportLine = [PSCustomObject]@{TimeStamp = $Rec.CreationDateUser = $AuditData.UserIdAction = $AuditData.OperationSiteUrl = $AuditData.SiteUrlSite = $AuditData.SourceRelativeUrlFile = $AuditData.SourceFileNameIpAddress = $AuditData.ClientIPApp = $AuditData.UserAgent}$Report.Add($ReportLine)}Write-Host “All done”$Report | Out-GridView -Title "File operation audit records"
Parameters
ParameterDefaultNotes
-LookbackDays180Number of days back to search the unified audit log.Attribution
Author
Office365itpros