Skip to content

Get-ExchangeMailboxReport

Exchange: Generates a detailed audit report of all mailboxes

#Requires -Version 5.1

[CmdletBinding()]
Param (
    [switch]$EnabledOnly,
    [switch]$ExcludeResources
)

Process {
    try {
        $mailboxes = Get-Mailbox -ResultSize Unlimited -ErrorAction Stop

        if ($EnabledOnly.IsPresent) {
            $mailboxes = $mailboxes | Where-Object { $_.IsMailboxEnabled -eq $true }
        }
        if ($ExcludeResources.IsPresent) {
            $mailboxes = $mailboxes | Where-Object { $_.IsResource -eq $false }
        }

        $results = foreach ($mb in $mailboxes) {
            [PSCustomObject]@{
                DisplayName          = $mb.DisplayName
                Alias                = $mb.Alias
                PrimarySmtpAddress   = $mb.PrimarySmtpAddress
                RecipientTypeDetails = $mb.RecipientTypeDetails
                Database             = $mb.Database.Name
                IsMailboxEnabled     = $mb.IsMailboxEnabled
                IsResource           = $mb.IsResource
                ArchiveStatus        = $mb.ArchiveStatus
                LastModified         = $mb.WhenChanged
            }
        }

        Write-Output ($results | Sort-Object DisplayName)
    }
    catch {
        throw
    }
}
Off

If set, includes only mailboxes where IsMailboxEnabled is true.

Off

If set, excludes resource mailboxes (Rooms and Equipment) from the report.

An interactive directory of PowerShell scripts.