From 6ab29a9590a11bcd5df3f276bf6c67e4b7cdc235 Mon Sep 17 00:00:00 2001 From: igor04091968 Date: Sat, 9 May 2026 12:24:52 +0300 Subject: [PATCH] fix(worktime): harden query-user parsing and skip unknown fallback --- windows/worktime-session-collector.ps1 | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/windows/worktime-session-collector.ps1 b/windows/worktime-session-collector.ps1 index 2b3eb38..c10f362 100644 --- a/windows/worktime-session-collector.ps1 +++ b/windows/worktime-session-collector.ps1 @@ -110,7 +110,12 @@ function Ensure-Bucket { } function Run-QueryUser { - $tries = @(@{File='quser';Args=''},@{File='query';Args='user'}) + $tries = @( + @{File='cmd.exe';Args='/c query user'}, + @{File='cmd.exe';Args='/c quser'}, + @{File='query.exe';Args='user'}, + @{File='quser.exe';Args=''} + ) foreach ($t in $tries) { try { $psi = New-Object System.Diagnostics.ProcessStartInfo @@ -126,7 +131,10 @@ function Run-QueryUser { $ms = New-Object System.IO.MemoryStream $buffer = New-Object byte[] 4096 while (($read = $stream.Read($buffer,0,$buffer.Length)) -gt 0) { $ms.Write($buffer,0,$read) } - $proc.WaitForExit() + if (-not $proc.WaitForExit(8000)) { + try { $proc.Kill() } catch {} + continue + } $bytes = $ms.ToArray() $text = Decode-Bytes-Auto -Bytes $bytes @@ -201,7 +209,8 @@ while ($true) { } if (-not $records -or $records.Count -eq 0) { - $records = @([pscustomobject]@{ username=$env:USERNAME; sessionName=''; sessionId=(Get-Process -Id $PID).SessionId; state='Unknown' }) + Start-Sleep -Seconds $sleepSec + continue } foreach ($rec in $records) {