The SCCM Client Health Monitor Script is a Powershell script which fixes common issues related to SCCM client health.
The script is currently capable of fixing following issues:
- SCCM client stuck in Provisioning Mode
- Corrupt Group Policy files (Registry.pol)
- BITS transfers with errors
- SCCM client service not running
- SCCM client service disabled
- No SCCM client installed
Further to fixing the mentioned issues, the script also supports sending an e-mail or a status to Microsoft Teams if any issues are found. All actions are logged to a local log file: SCCM-ClientHealthMonitor.log in the CCM\Logs folder.
.\SCCM-ClientHealthMonitor.ps1 -TestProvMode -TestGPOFiles
This will run tests and try to fix issues related to provisioning mode and corrupt group policy files.
.\SCCM-ClientHealthMonitor.ps1 -TestSCCMClient -InstallSCCMClient
This will test for a running ccmexec service and try to start the service if it’s not running. If the service doesn’t exists, the script will try to install the SCCM client.
.\SCCM-ClientHealthMonitor.ps1 -TestProvMode -TestGPOFiles -TestBITS -TestSCCMClient -InstallSCCMClient -EmailStatus -TeamsStatus
This will run the script with all available options.
The e-mail being sent with the -EmailStatus parameter looks like below example.
The status messages being sent with the -TeamsStatus parameter will look like below examples.
- Note: This is done with help from the PSTeams module. Find a lot more details on the use here: https://github.com/EvotecIT/PSTeams.
The SCCM-ClientHealthMonitor.log file will look like below example when opened with CMtrace.
- The script requires local administrative rights to run
- Modify the script. I have made a comment with # EDIT here the places that needs editing
- Modify the -EmailStatus part with your own details such as SMTP server, recipient etc.
- Modify the -TeamsStatus part with your own details such as URL for webhook, title, text etc.
- Modify the Install-SCCMClient function with MP and site code details
Running the Script
The best option to run the script, is to do so with a scheduled task.
- Running as SYSTEM
- Trigger: Running at log on of any user
- Action: Starting powershell.exe with argument: -ExecutionPolicy Bypass -File “\\ServerShare\SCCM-ClientHealthMonitor.ps1” -TestProvMode -TestGPOFiles -TestBITS -TestSCCMClient -InstallSCCMClient -EmailStatus -TeamsStatus
- 1.0 – Script created
- 2.0 – Added TestBITS, TestSCCMClient and InstallSCCMClient
- 3.0 – Added TeamsStatus, making the script able to send status notifications to Microsoft Teams
- 3.1 – Minor changes to $ComputerModel as well as added more commenting
I haven’t done the best commenting job in the script itself, so please let me know in the comment section down below if you need any assistance. 🙂
And of course, it goes without saying, but test this thoroughly before putting to use in production. ?
Also, if you are looking for more details on how to prepare Microsoft Teams for receiving notifications, please take a look at this great post by Michael Mardahl: https://www.scconfigmgr.com/2019/07/10/how-to-notify-a-microsoft-teams-channel-when-a-new-windows-device-has-enrolled-in-microsoft-intune/