How to run the Exchange Health Checker via Scheduled Task
Description:
You can run the Exchange Health Checker script by the help of a Scheduled Task on a daily, weekly or monthly base.
This article describes some of the ways how to run the script as task and how to create those tasks.
Note: We assume that the script is stored under C:\Scripts\HealthChecker
. Please make sure to adjust the path if you use a different one in your environment.
- The first thing to do is to create a service account which is used to run the script. It is recommended to use a strong password which will be changed regularly. It's also recommended to add the user to the
View-Only Organization Management
instead ofOrganization Management
. This should be sufficient for the script to run.
Note: Using View-Only Organization Management
instead of Organization Management
requires you to add the account to the local Administrators
group on each server. This can be achieved by creating a dedicated Security Group
which is then added to the Administrators
group on each Exchange server (manually or via Group Policy
).
- Now it's time to create the Scheduled Task. This can be done by the help of PowerShell:
We need to create multiple objects and finally combining them to the Scheduled Task. We need a trigger
, settings
, action
and task
object.
-
Create a trigger that defines when the script should be executed:
- (Example) Daily at 3 AM:
$hcTrigger = New-ScheduledTaskTrigger -Daily -At 3am
- (Example) Every four weeks on Monday at 3 AM:
$hcTrigger = New-ScheduledTaskTrigger -Weekly -WeeksInterval 4 -DaysOfWeek Monday -At 3am
- (Example) Daily at 3 AM:
-
Create a Scheduled Task setting object:
- (Example) Create a Scheduled Task settings object using the default settings:
$hcSettings = New-ScheduledTaskSettingsSet
- (Example) Create a Scheduled Task settings object and define
RestartCount
andRestartInterval
:$hcSettings = New-ScheduledTaskSettingsSet -RestartCount 3 -RestartInterval (New-TimeSpan -Minutes 60)
- (Example) Create a Scheduled Task settings object using the default settings:
-
Define the actions to be executed via Scheduled Task:
- (Example) Update the HealthChecker script, execute the script against the local server and generate the HTML report:
$hcAction = New-ScheduledTaskAction -Execute 'powershell.exe' -WorkingDirectory "C:\Scripts\HealthChecker\" -Argument '-NonInteractive -NoLogo -NoProfile -Command ".\HealthChecker.ps1 -ScriptUpdateOnly; .\HealthChecker.ps1; .\HealthChecker.ps1 -BuildHtmlServersReport"'
- (Example) Run the HealthChecker script against a remote Exchange server (named
ExchSrv01
in this example):$hcAction = New-ScheduledTaskAction -Execute 'powershell.exe' -WorkingDirectory "C:\Scripts\HealthChecker\" -Argument '-NonInteractive -NoLogo -NoProfile -Command ".\HealthChecker.ps1 -ScriptUpdateOnly; .\HealthChecker.ps1 -Server ExchSrv01; .\HealthChecker.ps1 -BuildHtmlServersReport"'
- (Example) Update the HealthChecker script, execute the script against the local server and generate the HTML report:
-
Create the Scheduled Task object using the pre-defined action, trigger and settings objects:
$hcTask = New-ScheduledTask -Action $hcAction -Trigger $hcTrigger -Settings $hcSettings
-
Create the Scheduled Task:
Register-ScheduledTask -TaskName 'HealthChecker Daily Run' -InputObject $hcTask -User (Read-Host "Please enter username in format (Domain\Username)") -Password (Read-Host "Please enter password")
Additional resources: