These little “scriptlets” will pop off a notification message in HTML format with a summary of information gathered by each.
The information is not server specific, as I tried to limit the number of instances required. And the content is very basic, but it gets the job done.
You can refer to James’ post above for more information on how to automatically schedule these to run.
You can copy the scripts by hovering over the code block and selecting “view source”
#//Mailbox Database Reports $messageParameters = @{ Subject = "Exchange 2007 Database Report - $((Get-Date).ToShortDateString())" Body = Get-MailboxDatabase -status | Select-Object Server, Name, Mounted, LastFullBackup | Sort-Object Server, Name | ConvertTo-Html | Out-String From = "[email protected]" To = "[email protected]" SmtpServer = "10.10.10.10" } Send-MailMessage @messageParameters -BodyAsHtml
Exchange 2007 queue summary:
#//Exchange 2007 Queue Report $messageParameters = @{ Subject = "Exchange 2007 Queue Report - $((Get-Date).ToShortDateString())" Body = Get-TransportServer | ForEach-Object { Get-Queue -Server $_ | Select-Object NextHopDomain, MessageCount, Status} | Sort-Object NextHopDomain | ConvertTo-Html | Out-String From = "[email protected]" To = "[email protected]" SmtpServer = "10.10.10.10" } Send-MailMessage @messageParameters -BodyAsHtml
Exchange 2003 queue summary:
#//Exchange 2003 Queue Report $messageParameters = @{ Subject = "Exchange 2003 Queue Report - $((Get-Date).ToShortDateString())" Body = Get-ExchangeServer | Where-Object {$_.IsExchange2007OrLater -eq $False} | ForEach-Object { Get-WmiObject -class exchange_smtpqueue -namespace ROOTMicrosoftExchangev2 -computername $_ | Where-Object -FilterScript {$_.MessageCount -gt 0} | Select-Object VirtualMachine, QueueName, MessageCount, Size} | Sort-Object VirtualMachine | ConvertTo-Html | Out-String From = "[email protected]" To = "[email protected]" SmtpServer = "10.10.10.10" } Send-MailMessage @messageParameters -BodyAsHtml
Exchange 2007 MAPI connectivity summary:
#//MAPI Connectivity Report $messageParameters = @{ Subject = "MAPI Connectivity Report - $((Get-Date).ToShortDateString())" Body = Get-MailboxServer | Where-Object {(get-mailboxdatabase -Server $_ ).count -gt '0'} | ForEach-Object { Test-MAPIConnectivity -Server $_ | Select-Object Server, Database, Result, @{Name="Latency(MS)";expression={(([TimeSpan] $_.Latency).TotalMilliSeconds)}}, Error} | Sort-Object Server, Database | ConvertTo-Html | Out-String From = "[email protected]" To = "[email protected]" SmtpServer = "10.10.10.10" } Send-MailMessage @messageParameters -BodyAsHtml
Exchange server disk summary:
#//Disk Space Reports $messageParameters = @{ Subject = "Exchange Disk Space Report - $((Get-Date).ToShortDateString())" Body = Get-ExchangeServer | ForEach-Object { Get-WmiObject -computer $_ Win32_LogicalDisk} | Where-Object {$_.DriveType -eq 3} | Select-Object SystemName, DeviceID, VolumeName, @{Name="Size(GB)";expression={[math]::round(($_.Size / 1073741824))}}, @{Name="Free(GB)";expression={[math]::round(($_.FreeSpace / 1073741824))}}, @{Name="Free(%)";expression={[math]::round(((($_.FreeSpace / 1073741824)/($_.Size / 1073741824)) * 100),0)}} | Sort-Object SystemName, DeviceID | ConvertTo-Html | Out-String From = "[email protected]" To = "[email protected]" SmtpServer = "10.10.10.10" } Send-MailMessage @messageParameters -BodyAsHtml
Exhcange services summary:
#//Exchange Services Report $messageParameters = @{ Subject = "Exchange Services Report - $((Get-Date).ToShortDateString())" Body = Get-ExchangeServer | ForEach-Object { Get-WmiObject -computername $_ -query "select * from win32_service where Name like 'MSExchange%' or Name like 'IIS%' or Name like 'SMTP%' or Name like 'POP%' or Name like 'W3SVC%'" | Select-Object SystemName, DisplayName, StartMode, State} | Sort-Object SystemName, DisplayName | ConvertTo-Html | Out-String From = "[email protected]" To = "[email protected]" SmtpServer = "10.10.10.10" } Send-MailMessage @messageParameters -BodyAsHtml