Public/Invoke-CCMClientScheduleUpdate.ps1
Function Invoke-CCMClientScheduleUpdate { [cmdletbinding()] param ( [Parameter(ValueFromPipeline = $true, ValueFromPipelineByPropertyName = $true, ParameterSetName = 'ComputerName', Position = 1, Mandatory = $true)] [string[]]$ComputerName, [Parameter(ParameterSetName = 'ComputerName')] [PSCredential]$Credential, [Parameter()] [ValidateSet('SoftwareUpdateScan')] [string[]]$ScheduleType, [Parameter()] [switch]$Quiet ) Begin { $scheduleHash = @{ '{00000000-0000-0000-0000-000000000001}' = 'Hardware Inventory' '{00000000-0000-0000-0000-000000000002}' = 'Software Inventory' '{00000000-0000-0000-0000-000000000003}' = 'Discovery Inventory' '{00000000-0000-0000-0000-000000000010}' = 'File Collection' '{00000000-0000-0000-0000-000000000011}' = 'IDMIF Collection' '{00000000-0000-0000-0000-000000000012}' = 'Client Machine Authentication' '{00000000-0000-0000-0000-000000000021}' = 'Request Machine Assignments' '{00000000-0000-0000-0000-000000000022}' = 'Evaluate Machine Policies' '{00000000-0000-0000-0000-000000000023}' = 'Refresh Default MP Task' '{00000000-0000-0000-0000-000000000024}' = 'LS (Location Service) Refresh Locations Task' '{00000000-0000-0000-0000-000000000025}' = 'LS (Location Service) Timeout Refresh Task' '{00000000-0000-0000-0000-000000000026}' = 'Policy Agent Request Assignment (User)' '{00000000-0000-0000-0000-000000000027}' = 'Policy Agent Evaluate Assignment (User)' '{00000000-0000-0000-0000-000000000031}' = 'Software Metering Generating Usage Report' '{00000000-0000-0000-0000-000000000032}' = 'Source Update Message' '{00000000-0000-0000-0000-000000000037}' = 'Clearing proxy settings cache' '{00000000-0000-0000-0000-000000000040}' = 'Machine Policy Agent Cleanup' '{00000000-0000-0000-0000-000000000041}' = 'User Policy Agent Cleanup' '{00000000-0000-0000-0000-000000000042}' = 'Policy Agent Validate Machine Policy / Assignment' '{00000000-0000-0000-0000-000000000043}' = 'Policy Agent Validate User Policy / Assignment' '{00000000-0000-0000-0000-000000000051}' = 'Retrying/Refreshing certificates in AD on MP' '{00000000-0000-0000-0000-000000000061}' = 'Peer DP Status reporting' '{00000000-0000-0000-0000-000000000062}' = 'Peer DP Pending package check schedule' '{00000000-0000-0000-0000-000000000063}' = 'SUM Updates install schedule' '{00000000-0000-0000-0000-000000000071}' = 'NAP action' '{00000000-0000-0000-0000-000000000101}' = 'Hardware Inventory Collection Cycle' '{00000000-0000-0000-0000-000000000102}' = 'Software Inventory Collection Cycle' '{00000000-0000-0000-0000-000000000103}' = 'Discovery Data Collection Cycle' '{00000000-0000-0000-0000-000000000104}' = 'File Collection Cycle' '{00000000-0000-0000-0000-000000000105}' = 'IDMIF Collection Cycle' '{00000000-0000-0000-0000-000000000106}' = 'Software Metering Usage Report Cycle' '{00000000-0000-0000-0000-000000000107}' = 'Windows Installer Source List Update Cycle' '{00000000-0000-0000-0000-000000000108}' = 'Software Updates Assignments Evaluation Cycle' '{00000000-0000-0000-0000-000000000109}' = 'Branch Distribution Point Maintenance Task' '{00000000-0000-0000-0000-000000000110}' = 'DCM policy' '{00000000-0000-0000-0000-000000000111}' = 'Send Unsent State Message' '{00000000-0000-0000-0000-000000000112}' = 'State System policy cache cleanout' '{00000000-0000-0000-0000-000000000113}' = 'Scan by Update Source' '{00000000-0000-0000-0000-000000000114}' = 'Update Store Policy' '{00000000-0000-0000-0000-000000000115}' = 'State system policy bulk send high' '{00000000-0000-0000-0000-000000000116}' = 'State system policy bulk send low' '{00000000-0000-0000-0000-000000000120}' = 'AMT Status Check Policy' '{00000000-0000-0000-0000-000000000121}' = 'Application manager policy action' '{00000000-0000-0000-0000-000000000122}' = 'Application manager user policy action' '{00000000-0000-0000-0000-000000000123}' = 'Application manager global evaluation action' '{00000000-0000-0000-0000-000000000131}' = 'Power management start summarizer' '{00000000-0000-0000-0000-000000000221}' = 'Endpoint deployment reevaluate' '{00000000-0000-0000-0000-000000000222}' = 'Endpoint AM policy reevaluate' '{00000000-0000-0000-0000-000000000223}' = 'External event detection' '{00000000-0000-0000-0000-000000000225}' = 'LSRefreshDefaultMPTask' } $ScheduleTypeHash = @{ SoftwareUpdateScan = '{00000000-0000-0000-0000-000000000108}', '{00000000-0000-0000-0000-000000000113}' } } Process { $cimSessionParam = @{ ComputerName = $ComputerName } if ($Credential) { $cimSessionParam['Credential'] = $Credential } $cimSession = New-CCMClientCimSession @cimSessionParam $cimSessionHash = @{ } #build hash to avoid slower where-object in invoke step $null = $cimSession.foreach( { $cimSessionHash.add($PSItem.ComputerName, $PSItem) }) $getScheduleParam = @{ Class = 'CCM_Scheduler_ScheduledMessage' Namespace = 'root\ccm\policy\machine\actualconfig' Filter = 'ScheduledMessageID LIKE "{00000000-0000-0000-0000-%"' CimSession = $cimSession } if ($ScheduleType) { $getScheduleParam['Filter'] = $ScheduleTypeHash[$ScheduleType].ForEach( { $PSItem }) -replace '.+', 'ScheduledMessageID = "$0"' -join " OR " } $schedule = Get-CimInstance @getScheduleParam $cimParam = @{ Namespace = 'root/ccm' Class = 'SMS_CLIENT' MethodName = 'TriggerSchedule' ErrorAction = 'Stop' } foreach ($a_Schedule in $schedule) { Try { Invoke-CimMethod @cimParam -CimSession $cimSessionHash[$a_Schedule.PSComputerName] -Arguments @{ sScheduleID = $a_Schedule.ScheduledMessageID } | Add-Member -NotePropertyName Schedule -NotePropertyValue ('{1} - {0}' -f $scheduleHash[$a_Schedule.ScheduledMessageID], $a_Schedule.ScheduledMessageID) -PassThru:(-not $Quiet.IsPresent) } catch { 'Could not trigger schedule: {0} - {1}' -f $scheduleHash[$a_Schedule.ScheduledMessageID], $a_Schedule.ScheduledMessageID | Write-Warning } } } } |