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'))."
}