One of the recent additions to the TechNet script gallery was this nifty little contribution from Marc Nivens.
This script reports on OS, system, and hardware information in addition to the Exchange 2013 sizing recommendations on TechNet. It can be ran remotely, against a single server or a group of servers. It takes some of the most common configuration causes of Exchange 2013 performance cases that we encounter in support and allows you to rule them out quickly without having to check each server or read through the entire TechNet guidance.
There are some parameters that can be specified, for example:
- MailboxReport - This optional parameter gives a report of the number of active and passive databases and mailboxes on the server.
- Verbose - This optional parameter enables verbose logging.
Note that you may need to unblock the file in case of PSSecurityException errors caused by the PowerShell execution policy.
Examples
Run against a single remote Exchange server:
.\HealthChecker.ps1 -Server SERVERNAME
Run against a single remote Exchange server with verbose logging and mailbox report enabled:
.\HealthChecker.ps1 -Server SERVERNAME -MailboxReport –Verbose
Run against all Exchange 2013 servers in the Organization:
Get-ExchangeServer | Where-Object {$_.AdminDisplayVersion -Match "^Version 15"} | For-EachObject { .\HealthChecker.ps1 -Server $_.Name}
Sample Output
The below shows the tool running against a single Exchange 2013 server.
This is also logged to the HealthCheck output file. This defaults to the local folder when the script was executed from.
Thanks Marc for the tool!
Cheers,
Rhoderick
Thanks
Images are broken 🙁
Appreciated the notice Fabian!
I assume that when you click the image it takes you to the 404 error page?
There has been an intermittent issue with the images on TechNet blogs, I’ll escalate this again.
Some people will see the image and others will not.
Cheers,
Rhoderick
Great script! just to clarify… to run on all servers, the correct sintaxis is:
Get-ExchangeServer | Where-Object {$_.AdminDisplayVersion -Match "^Version 15"} | ForEach-Object {.HealthChecker.ps1 -Server $_.Name}
cheers!
Thanks – added the pesky {
Cheers,
Rhoderick
sTill the command for-eachobject is wrong, needed to change to foreach-object
Since this is a long script, which line are you looking at please?
Cheers,
Rhoderick
Hi Rhoderick,
not in the script, but in the examples above to execute on all servers. For-EachObject should be ForEach-Object.
Ah Thanks Gregor!
Out, out you silly typo 🙂
Cheers,
Rhoderick