Exchange 2010: Un po’ di Get-MailboxStatistics

Per ottenere statistiche sulle mailbox Exchange abbiamo a disposizione la cmdlet powershell Get-MailboxStatistics che ci consente di ricavare tutte le informazioni relative ad occupazione, limiti e statistiche varie.

Il comando può essere utilizzato semplicemente fornendogli l’utente di cui si vogliono ottenere le statistiche con la seguente sintassi:

Get-MailboxStatistics [username]

Il comando produce un output in formato tabella con le informazioni relative al DisplayName, ItemCount, StorageLimitStatus e LastLogonTime:

image.png

Ovviamente questo comando ci dice poco, per avere ulteriori informazioni si può arricchire la sintassi mediante pipelining, definendo l’output in formato tabella e decidendo i campi di cui vogliono ottenere i valori.

La sintassi può essere la seguente:

Get-MailboxStatistics [username] | ft DisplayName, TotalItemSize, ItemCount

Questo comando produce il seguento output:

image.png

Si si vogliono ottenere le statistiche di più utenti, per esempio tutti gli utenti di un Mailbox Database, si può utilizzare il seguente comando:

Get-MailboxDatabase –Identity [database name] | Get-MailboxStatistics | ft DisplayName, TotalItemSize, ItemCount

Se si voglioni filtrare i risultati, si può utilizzare la seguente sintassi, in questo esempio vengono visualizzati solo i risultati degli oggetti classificati come “mailbox”:

 

Get-Mailbox | Get-MailboxStatistics| where {$_.ObjectClass –eq “Mailbox”} | ft DisplayName, TotalItemSize, ItemCount

 

Se si vuole applicare un ordinamento ai risultati ottenuti si può utilizzare la seguente sintassi:

 

Get-Mailbox | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft DisplayName, TotalItemSize, ItemCount

 

Se si vuole applicare qualche tipo di formattazione ai risultati, ad esempio per ottenere il valore di un campo in una unità di misura desiderata, si può utilizzare questa sintassi:

 

Get-Mailbox | Get-MailboxStatistics | Sort-Object TotalItemSize -Descending | ft DisplayName,@{expression={$_.TotalItemSize.Value.ToMB()}}, ItemCount

 

Di seguito riporto un esempio che combina la sintassi sopra descritta, introducendo anche la personalizzazione delle label delle colonne dei dati in output:

 

Get-Mailbox | Get-MailboxStatistics | where {$_.ObjectClass –eq “Mailbox”} | Sort-Object TotalItemSize –Descending | ft @{label=”User”;expression={$_.DisplayName}},@{label=”Total Size (MB)”;expression={$_.TotalItemSize.Value.ToMB()}},@{label=”Items”;expression={$_.ItemCount}},@{label=”Storage Limit”;expression={$_.StorageLimitStatus}} -auto

 

Questo esempio invece utilizza una sintassi leggermente diversa e non genera un output a video ma produce una esportazione in un file csv:

 

Get-Mailbox | Get-MailboxStatistics | Select @{n=”DisplayName”;e={$_.DisplayName}}, StorageGroupName,@{e={$_.TotalDeletedItemSize.Value.ToMB()};n=”TotalDeletedItemsSize(MB)”}, DeletedItemCount, @{e={$_.TotalItemSize.Value.ToMB()};n=”TotalItemSize(MB)”}, ItemCount, StorageLimitStatus | Sort-Object “TotalItemSize(MB)” | Export-Csv C:mailbox_stats.csv

 

 

 

Questo esempio genera un output a video in formato tabella di tutte le mailbox che hanno raggiunto il limite di “ProhibitSend”, applicando un ordinamento ed una conversione dell’unità di misura:

 

Get-Mailbox  | Get-MailboxStatistics | where-object {$_.StorageLimitStatus -eq “ProhibitSend”} |  Select @{n=”DisplayName”;e={$_.DisplayName}}, StorageGroupName,@{e={$_.TotalDeletedItemSize.Value.ToMB()};n=”TotalDeletedItemsSize(MB)”}, DeletedItemCount, @{e={$_.TotalItemSize.Value.ToMB()};n=”TotalItemSize(MB)”}, ItemCount, StorageLimitStatus | Sort-Object “TotalItemSize(MB)” | ft

 

Questo esempio genera un output su file csv di tutte le mailbox che hanno raggiunto il limite di “IssueWarnig”, applicando un ordinamento ed una conversione dell’unità di misura

 

Get-Mailbox | Get-MailboxStatistics | where-object {$_.StorageLimitStatus -eq “IssueWarning”} |  Select @{n=”DisplayName”;e={$_.DisplayName}}, StorageGroupName,@{e={$_.TotalDeletedItemSize.Value.ToMB()};n=”TotalDeletedItemsSize(MB)”}, DeletedItemCount, @{e={$_.TotalItemSize.Value.ToMB()};n=”TotalItemSize(MB)”}, ItemCount, StorageLimitStatus | Sort-Object “TotalItemSize(MB)” | Export-Csv C:mailbox_stats.csv

 

Per concludere riporto un utile script che produce un file csv con le statistiche desiderate e lo invia come allegato ad una mail all’amministratore del sistema:

 

### INIZIO DELLO SCRIPT ######Variabili da personalizzare

$FromAddress = MailboxReport@ferazzi.it
$ToAddress = “roberto@ferazzi.it”
$MessageSubject = “Mailbox Size Report”
$MessageBody = “In allegato il report delle statistiche delle mailbox Exchange.”
$SendingServer = “exchange.ferazzi.it”

###In questa sezione viene inserito il comando che genera il file

Get-Mailbox  | Get-MailboxStatistics | Select @{n=”DisplayName”;e={$_.DisplayName}}, StorageGroupName,@{e={$_.TotalDeletedItemSize.Value.ToMB()};n=”TotalDeletedItemsSize(MB)”}, DeletedItemCount, @{e={$_.TotalItemSize.Value.ToMB()};n=”TotalItemSize(MB)”}, ItemCount, StorageLimitStatus | Sort-Object “TotalItemSize(MB)” | Export-Csv C:mailboxes.csv

###Viene creata la mail con il file in allegato

$SMTPMessage = New-Object System.Net.Mail.MailMessage $FromAddress, $ToAddress, $MessageSubject, $MessageBody
$Attachment = New-Object Net.Mail.Attachment(“c:mailboxes.csv”)
$SMTPMessage.Attachments.Add($Attachment)

###Viene inviata la mail
$SMTPClient = New-Object System.Net.Mail.SMTPClient $SendingServer
$SMTPClient.Send($SMTPMessage)

### FINE DELLO SCRIPT ###

 

Roberto