32 lines
1.8 KiB
Python
32 lines
1.8 KiB
Python
"""Temporary interactive reference via QGA; start/stop with ten-minute expiry."""
|
|
import base64
|
|
import runpy
|
|
import sys
|
|
from pathlib import Path
|
|
|
|
root = Path(__file__).resolve().parents[3]
|
|
term = runpy.run_path(str(root / 'tools/pve_term_exec.py'))
|
|
vm = runpy.run_path(str(root / 'tools/pve_vm.py'))
|
|
ticket, csrf = term['login']()
|
|
task = 'VDIGPUResponseReference20261111'
|
|
folder = r'C:\ProgramData\VDI\gpu-response-20261111'
|
|
if sys.argv[1] == 'start':
|
|
encoded = base64.b64encode(Path(__file__).with_name('windows-response.ps1').read_bytes()).decode()
|
|
ps = r"""$ErrorActionPreference='Stop'; $folder='""" + folder + r"""';
|
|
New-Item -ItemType Directory -Force $folder | Out-Null
|
|
if (Get-ScheduledTask -TaskName '""" + task + r"""' -ErrorAction SilentlyContinue) { throw 'Task already exists' }
|
|
[IO.File]::WriteAllBytes("$folder\response.ps1",[Convert]::FromBase64String('""" + encoded + r"""'))
|
|
$action=New-ScheduledTaskAction -Execute powershell.exe -Argument "-NoProfile -ExecutionPolicy Bypass -STA -WindowStyle Hidden -File $folder\response.ps1"
|
|
$principal=New-ScheduledTaskPrincipal -UserId test -LogonType Interactive -RunLevel Limited
|
|
$settings=New-ScheduledTaskSettingsSet -ExecutionTimeLimit (New-TimeSpan -Minutes 10)
|
|
Register-ScheduledTask -TaskName '""" + task + r"""' -Action $action -Principal $principal -Settings $settings | Out-Null
|
|
Start-ScheduledTask -TaskName '""" + task + r"""'
|
|
'Started temporary response reference'
|
|
"""
|
|
else:
|
|
ps = "Stop-ScheduledTask -TaskName '" + task + "' -ErrorAction SilentlyContinue; Unregister-ScheduledTask -TaskName '" + task + "' -Confirm:$false -ErrorAction SilentlyContinue; 'Stopped temporary reference'"
|
|
out, err = vm['agent'](ticket, csrf, ['powershell.exe', '-NoProfile', '-Command', ps])
|
|
print(out)
|
|
if err:
|
|
raise RuntimeError(err)
|