46 lines
1.9 KiB
PowerShell
46 lines
1.9 KiB
PowerShell
[CmdletBinding()]
|
|
param(
|
|
[Parameter(Mandatory = $true)]
|
|
[string]$ReleaseRoot,
|
|
[Parameter(Mandatory = $true)]
|
|
[ValidatePattern("^[A-Za-z0-9._-]{1,96}$")]
|
|
[string]$RunId
|
|
)
|
|
|
|
$ErrorActionPreference = "Stop"
|
|
$taskName = "MissionCore-M49TgsFullShadow"
|
|
$release = (Resolve-Path -LiteralPath $ReleaseRoot).Path
|
|
$runner = Join-Path $release "payload\Invoke-M49TgsFullShadow.ps1"
|
|
if (-not (Test-Path -LiteralPath $runner -PathType Leaf)) { throw "M49 TGS full-shadow runner is missing" }
|
|
$existing = Get-ScheduledTask -TaskName $taskName -ErrorAction SilentlyContinue
|
|
if ($existing -and $existing.State -eq "Running") { throw "$taskName is already running" }
|
|
$powerShell = "$env:SystemRoot\System32\WindowsPowerShell\v1.0\powershell.exe"
|
|
$arguments = @(
|
|
"-NoLogo", "-NoProfile", "-NonInteractive", "-ExecutionPolicy", "Bypass",
|
|
"-File", "`"$runner`"", "-ReleaseRoot", "`"$release`"", "-RunId", "`"$RunId`""
|
|
) -join " "
|
|
$userId = [System.Security.Principal.WindowsIdentity]::GetCurrent().Name
|
|
$action = New-ScheduledTaskAction -Execute $powerShell -Argument $arguments -WorkingDirectory $release
|
|
$principal = New-ScheduledTaskPrincipal -UserId $userId -LogonType Interactive -RunLevel Limited
|
|
$trigger = New-ScheduledTaskTrigger -Once -At ((Get-Date).AddMinutes(30))
|
|
$settings = New-ScheduledTaskSettingsSet `
|
|
-AllowStartIfOnBatteries `
|
|
-DontStopIfGoingOnBatteries `
|
|
-StartWhenAvailable `
|
|
-ExecutionTimeLimit ([TimeSpan]::FromHours(2))
|
|
Register-ScheduledTask `
|
|
-TaskName $taskName `
|
|
-Action $action `
|
|
-Principal $principal `
|
|
-Trigger $trigger `
|
|
-Settings $settings `
|
|
-Description "One-shot CPU-only source-paced TGS full shadow." `
|
|
-Force | Out-Null
|
|
Start-ScheduledTask -TaskName $taskName
|
|
[pscustomobject]@{
|
|
task_name = $taskName
|
|
run_id = $RunId
|
|
release_root = $release
|
|
state = (Get-ScheduledTask -TaskName $taskName).State.ToString()
|
|
} | ConvertTo-Json -Compress
|