Exchange 2010 Script

We are quickly running out of space on our Exchange 2010 server and I need to be able to identify the following data in Powershell using a script. I would then like to be able to run this script weekly to generate an automated email with a CSV file defining the size of all mailboxes in the environment with specifics concerning the items and sizes of the following:
The overall item count in the mailbox
The overall size in MB and/or GB of the mailbox
The overall item count in the Deleted Items folder
The overall size in MB and/or GB of the Deleted Items folder
The overall item count in the Sent Items folder
The overall size in MB and/or GB of the Sent Items folder

I have come up with the following script by cutting and pasting numerous different source codes. The Total and Deleted functions are working but, I cannot get the Sent items to function or generate any data. Additionally, Is there a way to combine results from both mail servers?

Any and all help would be greatly appreciated.


SCRIPT FOLLOWS:

Get-MailboxStatistics -Server MAIL|
Sort-Object -Property TotalItemSize -Descending |
Select-Object -property DisplayName,@{N="ItemCount";E={$_.ItemCount}},
                  @{N="TotalItemSize";E={$_.TotalItemSize}},
                  @{N="deletedItemCount";E={$_.deletedItemCount}},
                  @{N="TotalDeletedItemSize";E={$_.TotalDeletedItemSize}},
                  @{N="sentItemsCount";E={$_.sentItemsCount}},
                  @{N="TotalSentItemsSize";E={$_.TotalSentItemsSize}},
                  @{N="Database";E={$_.Database}} |
Export-CSV -Path "E:\scripts\Mail-Rpt.csv" -NoTypeInformation

Get-MailboxStatistics -Server MAIL1|
Sort-Object -Property TotalItemSize -Descending |
Select-Object -property DisplayName,@{N="ItemCount";E={$_.ItemCount}},
                  @{N="TotalItemSize";E={$_.TotalItemSize}},
                  @{N="deletedItemCount";E={$_.deletedItemCount}},
                  @{N="TotalDeletedItemSize";E={$_.TotalDeletedItemSize}},
                  @{N="Database";E={$_.Database}} |
Export-CSV -Path "E:\scripts\Mail-Rpt1.csv" -NoTypeInformation


send-mailmessage -to postmaster@mailcom -from internal-email@mail.com -subject "Weekly mailbox

size report" -smtpserver "smtp" -attachments "E:\scripts\Mail-Rpt.csv","E:\scripts

\Mail-Rpt1.csv"
RFEMHelpdeskAsked:
Who is Participating?

Improve company productivity with a Business Account.Sign Up

x
 
SubsunConnect With a Mentor Commented:
Ok..I have modified the code a bit.. Try now..
"MAIL","MAIL1" | % {
Foreach ($Mailbox in (Get-Mailbox -Server $_ -ResultSize Unlimited)) {
Get-MailboxStatistics $Mailbox |
Sort-Object -Property TotalItemSize -Descending |
Select-Object -property ServerName,DisplayName,@{N="ItemCount";E={$_.ItemCount}},
                  @{N="TotalItemSize";E={$_.TotalItemSize.Value.ToMB()}},
                  @{N="deletedItemCount";E={$_.deletedItemCount}},
                  @{N="TotalDeletedItemSize";E={$_.TotalDeletedItemSize.Value.ToMB()}},
                  @{N="sentItemsCount";E={(get-mailboxfolderstatistics $Mailbox.Alias -FolderScope SentItems |?{$_.folderpath -eq '/Sent Items'}).ItemsInFolder}},
                  @{N="TotalSentItemsSize";E={(get-mailboxfolderstatistics $Mailbox.Alias -FolderScope SentItems |?{$_.folderpath -eq '/Sent Items'}).FolderSize.ToMB()}},
                  @{N="Database";E={$_.Database}}
	}
} | Export-CSV -Path "E:\scripts\Mail-Rpt.csv" -NoTypeInformation

Open in new window

0
 
SubsunCommented:
Get-mailboxstatistics does not return SentItems folder details. You need to use Get-mailboxfolderstatistics for that..

Try..
"MAIL","MAIL1" | % {
Get-MailboxStatistics -Server $_  |
Sort-Object -Property TotalItemSize -Descending |
Select-Object -property ServerName,DisplayName,@{N="ItemCount";E={$_.ItemCount}},
                  @{N="TotalItemSize";E={$_.TotalItemSize.Value.ToMB()}},
                  @{N="deletedItemCount";E={$_.deletedItemCount}},
                  @{N="TotalDeletedItemSize";E={$_.TotalDeletedItemSize.Value.ToMB()}},
                  @{N="sentItemsCount";E={($_ | get-mailboxfolderstatistics -FolderScope SentItems).ItemsInFolder}},
                  @{N="TotalSentItemsSize";E={($_ | get-mailboxfolderstatistics -FolderScope SentItems).FolderSize.ToMB()}},
                  @{N="Database";E={$_.Database}}
} | Export-CSV -Path "E:\scripts\Mail-Rpt.csv" -NoTypeInformation

Open in new window

0
 
RFEMHelpdeskAuthor Commented:
No values populating for Sent Items. :(
0
Improved Protection from Phishing Attacks

WatchGuard DNSWatch reduces malware infections by detecting and blocking malicious DNS requests, improving your ability to protect employees from phishing attacks. Learn more about our newest service included in Total Security Suite today!

 
SubsunCommented:
Try with get-mailboxfolderstatistics $_.DisplayName
"MAIL","MAIL1" | % {
Get-MailboxStatistics -Server $_  |
Sort-Object -Property TotalItemSize -Descending |
Select-Object -property ServerName,DisplayName,@{N="ItemCount";E={$_.ItemCount}},
                  @{N="TotalItemSize";E={$_.TotalItemSize.Value.ToMB()}},
                  @{N="deletedItemCount";E={$_.deletedItemCount}},
                  @{N="TotalDeletedItemSize";E={$_.TotalDeletedItemSize.Value.ToMB()}},
                  @{N="sentItemsCount";E={(get-mailboxfolderstatistics $_.DisplayName -FolderScope SentItems).ItemsInFolder}},
                  @{N="TotalSentItemsSize";E={(get-mailboxfolderstatistics $_.DisplayName -FolderScope SentItems).FolderSize.ToMB()}},
                  @{N="Database";E={$_.Database}}
} | Export-CSV -Path "E:\scripts\Mail-Rpt.csv" -NoTypeInformation

Open in new window

0
 
RFEMHelpdeskAuthor Commented:
That was progress, unfortunately, it seems as though it is only partially working as only about half of the mailboxes returned values for the Sent Items and Sent Items Size. Ideas?
0
 
SubsunCommented:
Hmm.. Probably they have identical display names..
Replace $_.DisplayName with $_.LegacyDN which is unique..
0
 
RFEMHelpdeskAuthor Commented:
No joy. Still the same mailboxes with no data.
0
 
SubsunCommented:
Do you mean all send item details come as empty or some of the mailbox values are empty?
0
 
RFEMHelpdeskAuthor Commented:
Some of the data populates and some do not. See attached file
Mail-Rpt.csv
0
 
RFEMHelpdeskAuthor Commented:
I appreciate the time you are spending but unfortunately, they are still coming up with the blanks.
0
 
SubsunCommented:
I had modified the code after posting.. can you copy paste the code and try again?
0
 
RFEMHelpdeskAuthor Commented:
DONE! Let me work with it in the morning. I need to be able to generate a scheduled task and have it emailed several times a week. If you could monitor this post tomorrow that would be great. I will assign the points to you as an accepted solution. Thank you very much.
0
 
RFEMHelpdeskAuthor Commented:
subsun was fantastic in working this issue. I couldn't have asked for more! I am thrilled with the results. Hopefully they will help me resolve my Exchange issues.

Thank you so much subsun!!!!!
0
 
RFEMHelpdeskAuthor Commented:
Is there a possibly a  way to have this sort on the Deleted Items Size?
0
 
SubsunCommented:
You can change it in line 4..

Sort-Object -Property TotalDeletedItemSize -Descending |
0
 
RFEMHelpdeskAuthor Commented:
Unfortunately.......No joy :( Now there is nothing sorted. I can manually sort but I would prefer to have it done when I open it.

~Schu
0
 
SubsunCommented:
Sorry my bad... Try this..
"MAIL","MAIL1" | % {
Foreach ($Mailbox in (Get-Mailbox -Server $_ -ResultSize Unlimited)) {
Get-MailboxStatistics $Mailbox |
Select-Object -property ServerName,DisplayName,@{N="ItemCount";E={$_.ItemCount}},
                  @{N="TotalItemSize";E={$_.TotalItemSize.Value.ToMB()}},
                  @{N="deletedItemCount";E={$_.deletedItemCount}},
                  @{N="TotalDeletedItemSize";E={$_.TotalDeletedItemSize.Value.ToMB()}},
                  @{N="sentItemsCount";E={(get-mailboxfolderstatistics $Mailbox.Alias -FolderScope SentItems |?{$_.folderpath -eq '/Sent Items'}).ItemsInFolder}},
                  @{N="TotalSentItemsSize";E={(get-mailboxfolderstatistics $Mailbox.Alias -FolderScope SentItems |?{$_.folderpath -eq '/Sent Items'}).FolderSize.ToMB()}},
                  @{N="Database";E={$_.Database}}
	}
} | Sort-Object -Property TotalDeletedItemSize -Descending | Export-CSV -Path "E:\scripts\Mail-Rpt.csv" -NoTypeInformation

Open in new window

0
 
RFEMHelpdeskAuthor Commented:
It's all about placement! BadaBing! BadaBoom! Exactly what I was looking for!

Thank you Again!
~Schu
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.