Public/Set-specDailyTaskTime.ps1
|
function Set-specDailyTaskTime { <# .SYNOPSIS Updates the start time of a daily scheduled task. .EXAMPLE try { Set-specDailyTaskTime -TaskName "Restart system" -TaskPath "\AFolder\" -Time (Get-Date "02:30") -Verbose -ErrorAction Stop } catch { Write-Warning "Oops! $_" } #> [CmdletBinding()] param( [Parameter(Mandatory)] [string]$TaskName, [Parameter(Mandatory)] [string]$TaskPath, [Parameter(Mandatory)] [datetime]$Time ) Write-Verbose "Checking if scheduled task '$TaskName' requires update..." $task = Get-specScheduledTask -TaskName $TaskName -TaskPath $TaskPath $needsUpdate = Test-specTaskNeedsUpdate -Task $task -DesiredTime $Time if (-not $needsUpdate) { Write-Output "Task '$TaskName' is already set to $($Time.ToString('HH:mm')). No changes needed." return } Write-Verbose "Task '$TaskName' needs update. Exporting XML..." $xmlString = Export-specScheduledTaskXml -TaskName $TaskName -TaskPath $TaskPath [xml]$xml = $xmlString Write-Verbose 'Updating StartBoundary times...' $updatedXml = Update-specTaskXmlStartBoundary -TaskXml $xml -NewTime $Time Write-Verbose 'Re-registering updated task...' Register-specUpdatedTask -TaskXml $updatedXml -TaskName $TaskName -TaskPath $TaskPath Write-Output "Task '$TaskName' updated to run daily at $($Time.ToString('HH:mm'))." } |