Product

Agent en runner

Een klein PowerShell-script als geplande taak onder SYSTEM. Het belt elke 5 seconden naar de server, voert precies de job uit die de server voor zijn eigen computernaam uitdeelde, en stuurt de uitvoer terug. De server belt nooit naar binnen.

Pull, geen poort open

De werkplek vraagt werk op over https. Geen inkomende verbinding, geen WinRM, geen agent-service van een derde partij.

Alleen zijn eigen jobs

De runner weigert een job voor een andere computernaam en rekent de sha256 van elk commando na, ook vlak voor de start.

Beschermde map

%ProgramData%\diagnose met een DACL voor alleen SYSTEM en Administrators; het token staat in een bestand dat nergens gelogd wordt.

Twee manieren om te installeren

1. De MSI: Diagnose Agent

Het installatiepakket zet de scripts in C:\Program Files\Diagnose Agent\ en roept daarna als SYSTEM hetzelfde installatiescript aan als de handmatige route; de beschermde map, het tokenbestand en de geplande taak zijn dus precies dezelfde. SERVER en TOKEN (het runnertoken van uw tenant) zijn verplicht bij de eerste installatie; bij een upgrade mogen ze weg.

DiagnoseAgent-0.3.2.msi

84 KB, versie 0.3.2, gebouwd 2026-10-16, niet ondertekend. sha256: f5a510fb9263a4dd1b84e1cbf2f931969570d9b79a8821d768adae94012aefde (als bestand)

Download de MSI
Stille installatie als administrator of SYSTEM
msiexec /i DiagnoseAgent-0.3.2.msi SERVER=https://diagnose.rektpump.com TOKEN=<runnertoken> /qn /l*v C:\Windows\Temp\diagnose-agent.log

Eigenschappen, Intune, GPO, RMM-voorbeeld, upgrade, verwijderen, logboeken en troubleshooting staan op de pagina Diagnose Agent (MSI).

Niet ondertekend. De MSI en de scripts hebben nog geen Authenticode-handtekening. Een stille installatie met msiexec vraagt daar niet om; bij dubbelklikken toont Windows een SmartScreen-waarschuwing, en AppLocker-beleid dat alleen ondertekende installers toelaat weigert het. Controleer het bestand daarom tegen de sha256 hierboven: Get-FileHash .\DiagnoseAgent-0.3.2.msi -Algorithm SHA256. Ondertekening komt zodra de pilot een certificaat rechtvaardigt; de auto-update van de runner kan er dan met UPDATETHUMBPRINT aan gebonden worden.

2. Het installatiescript

Op de werkplek, in Windows PowerShell 5.1 als administrator. Het script vraagt het runnertoken (niet zichtbaar, niet in de geschiedenis) en doet verder precies wat de MSI doet. Bekijk het eerst met -DryRun: dat vereist geen administrator en verandert niets.

Installeren
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
Invoke-WebRequest -UseBasicParsing https://diagnose.rektpump.com/install-runner-task.ps1 -OutFile $env:TEMP\install-runner-task.ps1
powershell -NoProfile -ExecutionPolicy Bypass -File $env:TEMP\install-runner-task.ps1 -Server https://diagnose.rektpump.com

Opties: -Token, -SecureToken of -TokenFile om het token mee te geven; -NoAutoUpdate of -UpdateThumbprint <sha1> voor het updatebeleid; -PollSeconds; -ReplaceInstallDir als de map al bestaat met een andere eigenaar; -Uninstall. De server serveert het script en de runner met hun sha256 op /install-runner-task.ps1, /diagnose-runner.ps1 en /diagnose-runner.ps1.sha256.

Wat er op de werkplek komt

  1. %ProgramData%\diagnose, aangemaakt met een expliciete DACL (alleen SYSTEM en Administrators, overerving uit); een junction of een map van een andere eigenaar wordt nooit stilzwijgend overgenomen.
  2. Het runnertoken in runner.token met dezelfde ACL, en een kopie van diagnose-runner.ps1 0.3.2.
  3. De geplande taak diagnose-runner: als SYSTEM, bij het opstarten, zonder tijdslimiet, MultipleInstances IgnoreNew, 99 keer opnieuw starten met een minuut tussenpoos bij een exitcode anders dan 0. De runner herstart zichzelf elke 24 uur (exitcode 3) en de taak start hem dan opnieuw.
  4. Een ping naar de server met het token. Een geweigerd token is een mislukte installatie (exitcode 2; bij een eerste installatie draait de MSI dan zijn rollback, bij een upgrade blijven taak en token van de vorige versie staan).

Controleren

Op de werkplek
Get-ScheduledTask diagnose-runner | Get-ScheduledTaskInfo
Get-Content "$env:ProgramData\diagnose\runner.log" -Tail 5

Verwacht: laatste resultaat 0 of lopend, en in het log de regels "diagnose-runner 0.3.2 start: modus local ... als NT AUTHORITY\SYSTEM" en "server bereikbaar, token geaccepteerd". In de viewer toont "Apparaten" de werkplek binnen 5 seconden als online, met modus local en het SYSTEM-account. Exitcode 2 in het log is een verkeerd token; exitcode 1 een onbeschermde map of een server zonder https.

Auto-update: wat u kiest

Standaard vergelijkt de runner bij de start en elk uur de sha256 op de server met zijn eigen bestand en vervangt hij zichzelf na controle van hash, syntaxis, versie (nooit lager) en een zelftest; de oude versie blijft als .bak en komt terug als de nieuwe binnen tien minuten met een configuratiefout stopt. Daarmee vertrouwt het apparaat de server voor de code van de runner: wie de server beheerst, krijgt SYSTEM op elk apparaat met auto-update. Wie wijzigingsbeheer op endpointcode wil, kiest NOAUTOUPDATE=1 (elke nieuwe runner is een nieuwe installatie) of ondertekent de runner en zet UPDATETHUMBPRINT; dat is de enige controle die niet van de server afhangt.

Grenzen

  • Alleen Windows met Windows PowerShell 5.1 in FullLanguage; onder AppLocker of WDAC ConstrainedLanguage stopt de collector meteen.
  • De apparaatnaam is de computernaam, en dat is een claim: elke tokenhouder van de tenant kan jobs van elk apparaat in die tenant ophalen. Tokens per apparaat zijn een latere stap.
  • De catalogus is voor SYSTEM geschreven: per-gebruiker printers, HKCU en Outlook-profielen zijn voor SYSTEM niet zichtbaar; de uitvoer zegt dat zelf.
  • De MSI is gebouwd en zonder administrator gecontroleerd (uitpakken, tabellen, verborgen token); de echte installatie als administrator op een werkplek is nog niet gedaan. In de end-to-end-test op de ontwikkel-pc draaide de runner als gewone gebruiker; de geplande taak als SYSTEM is bewezen in de stubtest (197 controles) en in dry-run. De eerste klantinstallatie is dus ook de eerste echte test daarvan.
  • Werkplekken die alleen via WinRM bereikbaar zijn: de runner kent een remote-modus vanaf een beheer-pc; de stap draait dan als het beheeraccount, niet als SYSTEM.

De volledige handleiding van de runner (modi, token, API-contract, apparaatbinding, timeouts en leases, veiligheidsmodel, troubleshooting) en de installatiehandleiding voor de klant komen bij een pilot mee.

Meedoen met de pilot

Een pilot is vijf tickets met eerlijke feedback per run, gratis voor de eerste deelnemers. U heeft een Windows-werkplek nodig waarop u de agent als administrator mag installeren, of een RMM die een PowerShell-script als SYSTEM kan draaien.