I am trying to monitor specific folders of specific users mailboxes. My thought was to call the users using a variable and then run a foreach loop and send the output to an email so that it will be emailed to me.
Here is what I am starting with:
$Session = New-PSSession -ConfigurationName Microsoft.Exchange -ConnectionUri http://ExchangeServer/PowerShell -Authentication Kerberos
Import-PSSession $Session -AllowClobber
$Users = 'user1','User2','user3','user4'
foreach($user in $users) {
$message = "------------- <br>"
$message ="checking user.... $user <br>"
$message = "------------- <br>"
$messsage = $report = Get-MailboxFolderStatistics $user | ?{$_.name -eq 'Top of Information Store' -or $_.name -eq 'Recoverable Items' -or $_.name -eq 'Deletions' -or $_.name -eq 'Purges' -or $_.name -eq 'Versions'} | ft Name, ItemsInFolder, FolderAndSubFolderSize
}
Send-MailMessage -SmtpServer smtpserver.domain.com -From [email protected] -To [email protected] -Subject "Litigation Mailbox Size Report" -Body $message -BodyAsHtml
Get-PSSession | Remove-PSSession
I can get it to send me an email but all it has is the email is dashed lines with the users but not the results from the get-mailboxfolderstatistics. I have tried using the $report variable for the get-mailboxfolderstatistics and then not using it. Neither seem to work. Any help would be appreciated.
CodePudding user response:
The immediate explanation for your symptom is a typo: $messsage
should be $message
, as Santiago Squarzon points out.
- To avoid such problems in scripts, consider setting
Set-StrictMode
-Version 1
, which prevents references to nonexistent variables. Higher versions implement additional checks (which can be problematic - see GitHub issue #2798).
Even with the typo corrected, additional work is required:
You must use Out-String
in order to embed a string rendering of the formatting instructions that Format-*
cmdlets such as Format-Table
(aliased to ft
) output:
$message = '<pre>{0}</pre>' -f (
Get-MailboxFolderStatistics $user |
Where-Object { $_.name -eq 'Top of Information Store' -or $_.name -eq 'Recoverable Items' -or $_.name -eq 'Deletions' -or $_.name -eq 'Purges' -or $_.name -eq 'Versions' } |
Format-Table Name, ItemsInFolder, FolderAndSubFolderSize |
Out-String
)
The above additionally wraps the output in a <pre>
HTML element, so that the content renders with a monospaced font for proper column alignment.
Note: Out-String
unexpectedly appends a trailing newline - see GitHub issue #14444. Add .TrimEnd()
to the (...)
expression to remove it, or .Trim()
to also remove leading whitespace (empty lines).