# Printora Fleet Agent — Windows installer # Run in elevated PowerShell: # Set-ExecutionPolicy Bypass -Scope Process -Force # .\install-windows.ps1 -Token "YOUR_TOKEN" -Url "https://printora.example.com" param( [Parameter(Mandatory=$true)][string]$Token, [Parameter(Mandatory=$true)][string]$Url, [string]$Network = "" ) $ErrorActionPreference = "Stop" $Dir = "$env:ProgramData\PrintoraAgent" New-Item -ItemType Directory -Force -Path $Dir | Out-Null Write-Host "[printora] installing to $Dir" # 1. Python check / install via winget if (-not (Get-Command python -ErrorAction SilentlyContinue)) { Write-Host "[printora] installing Python via winget..." winget install -e --id Python.Python.3.12 --accept-source-agreements --accept-package-agreements $env:Path = [System.Environment]::GetEnvironmentVariable("Path","Machine") + ";" + [System.Environment]::GetEnvironmentVariable("Path","User") } # 2. Agent source + deps Copy-Item "$PSScriptRoot\printora_agent.py" "$Dir\" -Force python -m pip install --quiet --disable-pip-version-check requests python -m pip install --quiet --disable-pip-version-check pysnmp 2>$null if ($LASTEXITCODE -ne 0) { Write-Warning "pysnmp unavailable - agent will use snmpget.exe (install Net-SNMP) if present" } # 3. Config — restrict ACL so only SYSTEM/Admins can read the token $cfg = @{ token = $Token; cloud_url = $Url } if ($Network -ne "") { $cfg.network = $Network } $CfgPath = "$Dir\agent_config.json" $cfg | ConvertTo-Json | Set-Content $CfgPath icacls $CfgPath /inheritance:r /grant:r "SYSTEM:F" "Administrators:F" | Out-Null # 4. Scheduled task at startup with auto-restart loop inside the agent $Action = New-ScheduledTaskAction -Execute "python.exe" ` -Argument "`"$Dir\printora_agent.py`"" ` -WorkingDirectory $Dir $Trigger = New-ScheduledTaskTrigger -AtStartup $Settings = New-ScheduledTaskSettingsSet -RestartCount 999 -RestartInterval (New-TimeSpan -Minutes 1) ` -ExecutionTimeLimit (New-TimeSpan -Days 3650) -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries $Principal = New-ScheduledTaskPrincipal -UserId "SYSTEM" -LogonType ServiceAccount -RunLevel Highest Register-ScheduledTask -TaskName "PrintoraFleetAgent" -Action $Action -Trigger $Trigger ` -Settings $Settings -Principal $Principal -Force | Out-Null Start-ScheduledTask -TaskName "PrintoraFleetAgent" Start-Sleep -Seconds 5 Write-Host "[printora] installed. Task: Get-ScheduledTask PrintoraFleetAgent | Log: $Dir\grgs_office_agent.log"