Scenario: You want to enable mailbox auditing on a mailbox and you want to log all actions performed by Admins, Delegates, and Owners. You also want to retrieve the audit entries into a easy to read format.
Enable Auditing on a Mailbox: By default, mailbox auditing is disabled but the audit options are already pre-set for Admin and Delegates. You will need to enable mailbox auditing and set the actions for the owner of the mailbox as well by running this command:
set-mailbox testuser1 -AuditEnabled $true -AuditOwner Update,Move,MoveToDeletedItems,SoftDelete,HardDelete,Create
To view the audit status for a mailbox:
get-mailbox testuser1 | FL *Audit*
View Audit Log entries
To view the log entries for an audit, you can run the following command-lets.
#Edit the following Variables
$Mailbox = "testuser1" #Mailbox that has Auditing Enabled
$hours = "48" #Hours to search back from
$myDir = "C:temp"
$mailto = "steve@domain.com"
$MailFrom = "steve@domain.com"
$ReportemailSubject = "Audit Log Results for $Mailbox"
$MailServer = "smtp.domain.com"
#Static Variables
$reportemailsubject = "Mailbox Audit Logs for $mailbox in last $hours hours."
$rawfile = "$myDirAuditLogEntries.csv"
$htmlfile = "$myDirAuditLogEntries.html"
$smtpsettings = @{
To = $MailTo
From = $MailFrom
Subject = $reportemailsubject
SmtpServer = $MailServer
}
Write-Host "Searching $mailbox for last $hours hours."
$auditlogentries = @()
$identity = (Get-Mailbox $mailbox).Identity
$auditlogentries = Search-MailboxAuditLog -Identity $mailbox -LogonTypes 'Delegate','Owner','Admin' -StartDate (Get-Date).AddHours(-$hours) -ShowDetails
if ($($auditlogentries.Count) -gt 0)
{
Write-Host "Writing raw data to $rawfile"
$auditlogentries | Export-CSV $rawfile -NoTypeInformation -Encoding UTF8
foreach ($entry in $auditlogentries)
{
$reportObj = New-Object PSObject
$reportObj | Add-Member NoteProperty -Name "Mailbox" -Value $entry.MailboxResolvedOwnerName
$reportObj | Add-Member NoteProperty -Name "Mailbox UPN" -Value $entry.MailboxOwnerUPN
$reportObj | Add-Member NoteProperty -Name "Timestamp" -Value $entry.LastAccessed
$reportObj | Add-Member NoteProperty -Name "Audit Logon Type" -Value $entry.LogonType
$reportObj | Add-Member NoteProperty -Name "Accessed By" -Value $entry.LogonUserDisplayName
$reportObj | Add-Member NoteProperty -Name "Operation" -Value $entry.Operation
$reportObj | Add-Member NoteProperty -Name "Result" -Value $entry.OperationResult
$reportObj | Add-Member NoteProperty -Name "Folder" -Value $entry.FolderPathName
if ($entry.ItemSubject)
{
$reportObj | Add-Member NoteProperty -Name "Subject Lines" -Value $entry.ItemSubject
}
else
{
$reportObj | Add-Member NoteProperty -Name "Subject Lines" -Value $entry.SourceItemSubjectsList
}
$report += $reportObj
}
$htmlbody = $report | ConvertTo-Html -Fragment
$htmlhead="<html>
<style>
BODY{font-family: Arial; font-size: 8pt;}
H1{font-size: 22px; font-family: 'Segoe UI Light','Segoe UI','Lucida Grande',Verdana,Arial,Helvetica,sans-serif;}
H2{font-size: 18px; font-family: 'Segoe UI Light','Segoe UI','Lucida Grande',Verdana,Arial,Helvetica,sans-serif;}
H3{font-size: 16px; font-family: 'Segoe UI Light','Segoe UI','Lucida Grande',Verdana,Arial,Helvetica,sans-serif;}
TABLE{border: 1px solid black; border-collapse: collapse; font-size: 8pt;}
TH{border: 1px solid #969595; background: #dddddd; padding: 5px; color: #000000;}
TD{border: 1px solid #969595; padding: 5px; }
td.pass{background: #B7EB83;}
td.warn{background: #FFF275;}
td.fail{background: #FF2626; color: #ffffff;}
td.info{background: #85D4FF;}
</style>
<body>
<p>Report of mailbox audit log entries for $mailbox in the last $hours hours.</p>"
$htmltail = "</body></html>"
$htmlreport = $htmlhead + $htmlbody + $htmltail
Write-Host "Writing report data to $htmlfile"
$htmlreport | Out-File $htmlfile -Encoding UTF8
Write-Host "Sending email"
Send-MailMessage @smtpsettings -Body $htmlreport -BodyAsHtml -Encoding ([System.Text.Encoding]::UTF8) -Attachments $rawfile
}
Write-Host "Finished."