Remotely Restart SCCM Sync Cycle Using Powershell
There are times when an SCCM administrator would need to quickly restart a remote machine’s sync cycle in order to have it talk back to the SCCM server and get whatever update you’re trying to push out. While there are ways to do in the GUI, it can also become very useful to have this accomplished using Powershell. The best thing about the Restart-SCCMSyncCycle script is that you can dynamically add multiple computers either from the pipeline or an array variable. Here is the script to remotely Restart-SCCMSyncCycle using Powershell.
Restart-SCCMSyncCycle Powershell Script
Function Restart-SCCMSyncCycle { <# .Synopsis Remotely restarts sccm service cycles. .DESCRIPTION This function restarts all sccm policies on a remote client so that the client can immediately get any pending software updates or inventory. .NOTES Name: Restart-SCCMSyncCycle Author: theSysadminChannel Version: 1 DateCreated: 2017-02-09 .LINK https://thesysadminchannel.com/remotely-restart-sccmsynccycle-using-powershell - .PARAMETER ComputerName The computer to which connectivity will be checked .EXAMPLE Restart-SCCMSyncCycle -Computername Pactest-1 Description: Will restart all sccm services on a remote machine. .EXAMPLE Restart-SCCMSyncCycle -ComputerName pactest-1, pactest-2, pactest-3 Description: Will generate a list of installed programs on pactest-1, pactest-2 and pactest-3 #> [CmdletBinding()] param( [Parameter( ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true, Position=0)] [string[]] $ComputerName = $env:COMPUTERNAME ) Foreach ($Computer in $ComputerName ) { try { Write-Host "=====================================================================" Write-Output "$Computer : Machine Policy Evaluation Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000022}" -ErrorAction Stop | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : Application Deployment Evaluation Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000121}" | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : Discovery Data Collection Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000003}" | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : File Collection Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000010}" | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : Hardware Inventory Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000001}" | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : Machine Policy Retrieval Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000021}" | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : Software Inventory Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000002}" | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : Software Metering Usage Report Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000031}" | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : Software Update Deployment Evaluation Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000114}" | select -ExpandProperty PSComputerName | Out-Null #Write-Output "$Computer : Software Update Scan Cycle" #Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000113}" | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : State Message Refresh" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000111}" | select -ExpandProperty PSComputerName | Out-Null #Write-Output "$Computer : User Policy Retrieval Cycle" #Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000026}" | select -ExpandProperty PSComputerName | Out-Null #Write-Output "$Computer : User Policy Evaluation Cycle" #Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000027}" | select -ExpandProperty PSComputerName | Out-Null Write-Output "$Computer : Windows Installers Source List Update Cycle" Invoke-WMIMethod -ComputerName $Computer -Namespace root\ccm -Class SMS_CLIENT -Name TriggerSchedule "{00000000-0000-0000-0000-000000000032}" | select -ExpandProperty PSComputerName | Out-Null sleep 1 } catch { Write-Host $Computer.toUpper() "is not online" -ForegroundColor:Red Write-Host Write-Host } } }
The output when ran on multiple computers looks something like the image below.
Hopefully you can find some use out of this Restart-SCCMSyncCycle script to manage your SCCM clients. I know during my time as an SCCM administrator it has helped me tons.
Also don’t forget to check out our SCCM Playlist on YouTube for more SCCM tips and tools.