How to Get exchange health status
To get exchange health status first open exchange Powershell , run the command :
Get-MailboxDatabaseCopyStatus * | sort name | Select name,status,contentindexstate
If all the databases are mounted and the index state is healthy you are in a good state. To fix the index if not healthy :
Stop-Service MSExchangeFastSearch
Stop-Service HostControllerService
#get the path to the index file folder:
Get-MailboxDatabase glilyamDBNew | select EdbFilePath
#Delete the folder GuiD, The folder it self, Restarting the services will re-creat it
Start-Service MSExchangeFastSearch
Start-Service HostControllerService
Test-ExchangeServerHealth.ps1 script will Perform a series of health checks on the specified Exchange servers
and outputs the results to screen, and optionally to log file, HTML report, and HTML email.
Test-ExchangeServerHealth.ps1 download: https://gallery.technet.microsoft.com/scriptcenter/Generate-Health-Report-for-19f5fe5f/file/133621/6/Test-ExchangeServerHealth.ps1
MOre information about implementation : https://github.com/cunninghamp/Test-ExchangeServerHealth.ps1
Examples:
.\Test-ExchangeServerHealth.ps1
Checks all servers in the organization and outputs the results to the shell window.
.\Test-ExchangeServerHealth.ps1 -Server Your_Server_Name
Checks the server and outputs the results to the shell window.
.\Test-ExchangeServerHealth.ps1 -ReportMode -SendEmail
Checks all servers in the organization, outputs the results to the shell window, a HTML report, and emails the HTML report to the address configured in the script.
If you use the report mode you’ll get a HTML file containing the health check results, and/or an email to your designated address if you also use the send email option.
For the email functionality to work please update these variables in the script to suit your environment.
#................................... # Modify these Email Settings #................................... $smtpsettings = @{ To = "administrator@exchangeserverpro.net" From = "exchangeserver@exchangeserverpro.net" Subject = "Exchange Server Health Report - $now" SmtpServer = "smtp.exchangeserverpro.net" }
When running the script on non-English servers you can modify the following variables in the script to match your language so that the script does not give errors or incorrect results.
#................................... # Modify these language # localization strings. #................................... # The server roles must match the role names you see when you run Test-ServiceHealth. $casrole = "Client Access Server Role" $htrole = "Hub Transport Server Role" $mbrole = "Mailbox Server Role" $umrole = "Unified Messaging Server Role" # This should match the word for "Success", or the result of a successful Test-MAPIConnectivity test $success = "Success"
For example, a German system would use the following values:
# The server roles must match the role names you see when you run Test-ServiceHealth. $casrole = "Clientzugriffs-Serverrolle" $htrole = "Hub-Transport-Serverrolle" $mbrole = "Postfachserverrolle" $umrole = "Unified Messaging-Serverrolle" # This should match the word for "Success", or the result of a successful Test-MAPIConnectivity test $success = "Erfolgreich"
Use the ignorelist.txt file to specify the names of any servers, DAGs, or databases that you want to ignore for the tests.
My scheduled task settings for this script are:
- Run whether user is logged on or not
- Run with highest privileges
- Action: Start a program
- Program: powershell.exe
- Arguments: -command “C:\Scripts\ExchangeServerHealth\Test-ExchangeServerHealth.ps1 -Log -SendEmail”