fix: use WindowStyle=Hidden instead of NoNewWindow in headless scanner dispatch

NoNewWindow caused scanner processes to inherit PowerShell's stdout/stderr
pipe handles from the GuruRMM agent. If any scanner hung in Session 0
(e.g. AdwCleaner GUI init), it held the pipe open after PowerShell exited,
blocking the GuruRMM command for hours until the server-side reaper fired.

WindowStyle=Hidden gives each scanner its own window/console so pipe
handles are not inherited. Scanner processes that timeout are still killed
by Wait-ProcessWithTimeout; the overall scan completes normally.

Verified: full pipeline completes in ~7.5 min on RMM-TEST-MACHINE with
EICAR detection, GURUSCAN_RESULT_JSON emitted correctly.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-27 02:09:33 -07:00
parent 87ac008b06
commit 98f875131e

View File

@@ -531,9 +531,16 @@ function Invoke-ScanPass {
try {
$startParams = @{
FilePath = $launchExe
PassThru = $true
NoNewWindow = [bool]$Headless
FilePath = $launchExe
PassThru = $true
}
# Use WindowStyle=Hidden (not NoNewWindow) so scanner processes get
# their own window/console and do NOT inherit the PowerShell pipe
# handles. With NoNewWindow the child shares the parent console and
# inherits its stdout/stderr pipes; if a scanner hangs the pipe stays
# open after PowerShell exits, blocking the GuruRMM agent for hours.
if ($Headless) {
$startParams['WindowStyle'] = 'Hidden'
}
if ($expandedArgs -and $expandedArgs.Count -gt 0) {
$startParams['ArgumentList'] = $expandedArgs