# winpe-status-push.ps1 - Posts "WinPE: PESetup / WIM apply" status to the # PXE webapp /imaging/status endpoint so the imaging dashboard reflects # this bay BEFORE Run-ShopfloorSetup.ps1 takes over post-PPKG. # # Runs in WinPE's stripped PowerShell - cannot rely on Get-NetAdapter, # Get-CimInstance, or the NetTCPIP module (none are present in stock # WinPE). Uses wmic for both serial and MAC. # # Best-effort: never blocks imaging. All steps log to # X:\Windows\Temp\winpe-status-push.log; failures are swallowed. param( [string]$PxeServer = '172.16.9.1', [int]$Port = 9009, [int]$TimeoutSec = 5, [string]$PCType = $env:PCTYPE ) $logFile = 'X:\Windows\Temp\winpe-status-push.log' function Log { param([string]$msg) try { "$(Get-Date -Format s) $msg" | Out-File -FilePath $logFile -Append -Encoding utf8 } catch { } } Log "=== winpe-status-push start ===" Log "server=${PxeServer}:${Port} pctype=$PCType" # Serial via wmic. Always available in WinPE 10+. $serial = '' try { $line = (& wmic bios get serialnumber /value 2>$null | Where-Object { $_ -match '=' } | Select-Object -First 1) if ($line) { $serial = ($line -split '=', 2)[1].Trim() } } catch { Log "serial wmic exception: $_" } Log "serial=$serial" # MAC via wmic NIC enumeration. NetEnabled filter restricts to up adapters. $mac = '' try { $macLines = & wmic nic where 'NetEnabled=TRUE' get MacAddress /value 2>$null | Where-Object { $_ -match 'MacAddress=' } if ($macLines) { $first = ($macLines | Select-Object -First 1) $mac = (($first -split '=', 2)[1]).Trim() -replace '-', ':' } } catch { Log "mac wmic exception: $_" } Log "mac=$mac" if (-not $serial) { Log "no serial captured - aborting POST" exit 0 } # Compose JSON. ConvertTo-Json works in WinPE. $payload = @{ serial = $serial pctype = $PCType current_stage = 'WinPE: PESetup / WIM apply' stage_index = 1 stage_total = 8 status = 'in_progress' } if ($mac) { $payload.mac = $mac } $body = $payload | ConvertTo-Json -Compress $uri = "http://${PxeServer}:${Port}/imaging/status" Log "POST $uri body=$body" try { $resp = Invoke-WebRequest -Uri $uri -Method POST -Body $body ` -ContentType 'application/json' -UseBasicParsing -TimeoutSec $TimeoutSec -ErrorAction Stop Log "OK http=$($resp.StatusCode)" } catch { Log "ERR $($_.Exception.Message)" } exit 0