Public/Exchange/Mailbox/Get/Get-ExMailboxStatisticsDetail.ps1
|
<#
.SYNOPSIS Gets detailed mailbox statistics for Exchange Online including item count by type. .DESCRIPTION This function retrieves comprehensive statistics for an Exchange Online mailbox, including: - General statistics (size, total item count, etc.) - Item count by folder (Inbox, Sent Items, etc.) - Number of contacts - Number of calendar items - Number of tasks - Number of notes .PARAMETER Identity Mailbox identity (email address, username, etc.) .PARAMETER IncludeFolderDetails Include folder details in the results .EXAMPLE Get-ExMailboxStatisticsDetail -Identity "user@domain.com" Gets detailed statistics for the specified mailbox. .EXAMPLE Get-ExMailboxStatisticsDetail -Identity "user@domain.com" -IncludeFolderDetails Gets statistics with folder details included. .NOTES Author: Bastien Perez Version: 1.0.0 #> function Get-ExMailboxStatisticsDetail { [CmdletBinding()] param( [Parameter(Mandatory = $true, ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true)] [string]$Identity, [Parameter(Mandatory = $false)] [switch]$IncludeFolderDetails ) begin { # Check if Exchange Online module is available if (-not (Get-Command 'Get-MailboxStatistics' -ErrorAction SilentlyContinue)) { throw 'Exchange Online PowerShell module is not available. Please connect using Connect-ExchangeOnline.' } Write-Verbose "Starting statistics retrieval for mailbox $Identity" } process { try { # Get general mailbox statistics Write-Verbose 'Retrieving general statistics...' $mailboxStats = Get-MailboxStatistics -Identity $Identity -ErrorAction Stop # Get folder statistics Write-Verbose "Retrieving folder statistic for mailbox $Identity..." $folderStats = Get-MailboxFolderStatistics -Identity $Identity -ErrorAction Stop # Calculate statistics by item type $inboxItems = ($folderStats | Where-Object { $_.FolderType -eq 'Inbox' } | Measure-Object ItemsInFolder -Sum).Sum $sentItems = ($folderStats | Where-Object { $_.FolderType -eq 'SentItems' } | Measure-Object ItemsInFolder -Sum).Sum $deletedItems = ($folderStats | Where-Object { $_.FolderType -eq 'DeletedItems' } | Measure-Object ItemsInFolder -Sum).Sum $drafts = ($folderStats | Where-Object { $_.FolderType -eq 'Drafts' } | Measure-Object ItemsInFolder -Sum).Sum $junkEmail = ($folderStats | Where-Object { $_.FolderType -eq 'JunkEmail' } | Measure-Object ItemsInFolder -Sum).Sum $outbox = ($folderStats | Where-Object { $_.FolderType -eq 'Outbox' } | Measure-Object ItemsInFolder -Sum).Sum # Specific items $contacts = ($folderStats | Where-Object { $_.FolderType -eq 'Contacts' } | Measure-Object ItemsInFolder -Sum).Sum $calendar = ($folderStats | Where-Object { $_.FolderType -eq 'Calendar' } | Measure-Object ItemsInFolder -Sum).Sum $tasks = ($folderStats | Where-Object { $_.FolderType -eq 'Tasks' } | Measure-Object ItemsInFolder -Sum).Sum $notes = ($folderStats | Where-Object { $_.FolderType -eq 'Notes' } | Measure-Object ItemsInFolder -Sum).Sum # Custom/other folders $otherFolders = $folderStats | Where-Object { $_.FolderType -notin @('Inbox', 'SentItems', 'DeletedItems', 'Drafts', 'JunkEmail', 'Outbox', 'Contacts', 'Calendar', 'Tasks', 'Notes', 'Root') } $otherItems = ($otherFolders | Measure-Object ItemsInFolder -Sum).Sum # Create result object $result = [PSCustomObject]@{ Identity = $Identity DisplayName = $mailboxStats.DisplayName TotalItemSize = $mailboxStats.TotalItemSize TotalDeletedItemSize = $mailboxStats.TotalDeletedItemSize ItemCount = $mailboxStats.ItemCount DeletedItemCount = $mailboxStats.DeletedItemCount LastLogonTime = $mailboxStats.LastLogonTime LastUserActionTime = $mailboxStats.LastUserActionTime # Detail by folder type InboxItems = if ($null -eq $inboxItems) { 0 } else { $inboxItems } SentItems = if ($null -eq $sentItems) { 0 } else { $sentItems } DeletedItems = if ($null -eq $deletedItems) { 0 } else { $deletedItems } DraftsItems = if ($null -eq $drafts) { 0 } else { $drafts } JunkEmailItems = if ($null -eq $junkEmail) { 0 } else { $junkEmail } OutboxItems = if ($null -eq $outbox) { 0 } else { $outbox } # Specific requested items ContactsCount = if ($null -eq $contacts) { 0 } else { $contacts } CalendarItemsCount = if ($null -eq $calendar) { 0 } else { $calendar } TasksCount = if ($null -eq $tasks) { 0 } else { $tasks } NotesCount = if ($null -eq $notes) { 0 } else { $notes } # Other folders OtherFoldersItems = if ($null -eq $otherItems) { 0 } else { $otherItems } # Additional information DatabaseName = $mailboxStats.Database ServerName = $mailboxStats.ServerName MailboxGuid = $mailboxStats.MailboxGuid } # Add folder details if requested if ($IncludeFolderDetails) { $folderDetails = $folderStats | Select-Object FolderName, FolderType, ItemsInFolder, FolderSize | Sort-Object FolderType, FolderName $result | Add-Member -MemberType NoteProperty -Name 'FolderDetails' -Value $folderDetails } Write-Output $result } catch { Write-Error "Error retrieving statistics for mailbox $Identity : $($_.Exception.Message)" } } end { Write-Verbose 'Statistics retrieval completed' } } |