Files
Assetmanager/app/templates/jobs/powershell_wrapper.ps1
T

46 lines
2.2 KiB
PowerShell

$ErrorActionPreference = 'Stop'
$log = Join-Path $env:ProgramData 'AssetManager\commands.log'
$clientLog = [System.Collections.Generic.List[string]]::new()
$JobResult = @{}
New-Item -ItemType Directory -Force -Path (Split-Path $log) | Out-Null
function Send-JobCallback([hashtable]$Data) {
$json = $Data | ConvertTo-Json -Depth 8 -Compress
$bodyBytes = [Text.Encoding]::UTF8.GetBytes($json)
$lastError = $null
for ($attempt = 1; $attempt -le 3; $attempt++) {
try {
Invoke-RestMethod -Method Post -Uri '{{CallbackUrl}}' -ContentType 'application/json; charset=utf-8' -Body $bodyBytes -TimeoutSec 60 | Out-Null
if ($attempt -gt 1) { Write-JobLog ("Callback accepted on attempt $attempt of 3") }
return
} catch {
$lastError = $_.Exception
Write-JobLog ("Callback attempt $attempt of 3 failed: " + $_.Exception.Message)
if ($attempt -lt 3) { Start-Sleep -Seconds (2 * $attempt) }
}
}
throw ("Callback failed after 3 attempts: " + $lastError.Message)
}
function Write-JobLog([string]$Message) {
$line = "$(Get-Date -Format o) job={{JobId}} $Message"
$clientLog.Add($line)
Add-Content -Path $log -Value $line -Encoding UTF8
Write-Output $line
}
try {
Write-JobLog 'Job started'
try { Send-JobCallback @{status='running'; completed=$false; message='Job started on client'; log=($clientLog -join "`n")} } catch { Write-JobLog ("Initial callback failed: " + $_.Exception.Message) }
# --- Eigene Befehle hier einfügen ---
# --- Ende eigene Befehle ---
Write-JobLog 'Job completed'
$bodyData = @{status='success'; exit_code=0; completed=$true; message='Job completed'; log=($clientLog -join "`n")}
if ($JobResult -is [System.Collections.IDictionary]) { foreach ($key in $JobResult.Keys) { $bodyData[$key] = $JobResult[$key] } }
$body = $bodyData | ConvertTo-Json -Depth 8 -Compress
Send-JobCallback $bodyData
} catch {
Write-JobLog ("Job failed: " + $_.Exception.Message)
$body = @{status='failed'; exit_code=1; completed=$true; message=$_.Exception.Message; log=($clientLog -join "`n"); stderr=($_ | Out-String)} | ConvertTo-Json -Compress
try { Send-JobCallback @{status='failed'; exit_code=1; completed=$true; message=$_.Exception.Message; log=($clientLog -join "`n"); stderr=($_ | Out-String)} } catch {}
exit 1
}