From 77c917157d38fed8b2cd48d4682549c735475b2e Mon Sep 17 00:00:00 2001 From: cproudlock Date: Sun, 24 May 2026 13:12:03 -0400 Subject: [PATCH] select-waxtrace-asset.ps1: read bay-config.csv (17 bays) by default Picker was still pointed at calibrations/INDEX.csv, which only listed 14 bays that have a per-asset cal ISO ripped. Three bays we just refreshed into bay-config.csv (WJF00450, WJF00461, WJRP0423) had no cal-disc entry, so they fell off the menu and tech had to drop to the free-text prompt to type the asset by hand - felt like a regression. Two changes: - select-waxtrace-asset.ps1: prefer bay-config.csv when -IndexPath points there (now the default). Auto-detect schema by checking for the ftpak_version column. Display columns become ASSET / FTPAK / MODEL / USER ID so the tech can confirm bay metadata at a glance before pressing Enter. Falls back to calibrations/INDEX.csv if bay-config.csv missing. - startnet.cmd: invoke the picker with -IndexPath bay-config.csv. Pushed: both boot.wim copies refreshed via wimupdate, new select-waxtrace-asset.ps1 deployed to PXE share, new boot.wim landed at /var/www/html/win11/sources/boot.wim on 172.16.9.1. bay-config.csv parent-dir copy synced with scripts/bay-config.csv so resolve-bay-config.ps1 (called from startnet.cmd in WinPE) and the picker both see the same 17-bay set. --- playbook/select-waxtrace-asset.ps1 | 78 ++++++++++++++----- .../gea-shopfloor-waxtrace/bay-config.csv | 34 ++++---- playbook/startnet.cmd | 2 +- 3 files changed, 78 insertions(+), 36 deletions(-) diff --git a/playbook/select-waxtrace-asset.ps1 b/playbook/select-waxtrace-asset.ps1 index 28dfc97..6393a35 100644 --- a/playbook/select-waxtrace-asset.ps1 +++ b/playbook/select-waxtrace-asset.ps1 @@ -1,9 +1,10 @@ # select-waxtrace-asset.ps1 - Arrow-key bay picker for wax/trace imaging. # -# Reads the calibration INDEX.csv on the PXE share to build the menu of known -# bays. Operator picks with Up/Down arrows + Enter. Always appends an -# "Other (new bay)" option at the end for bays that don't have a cal ISO yet - -# selecting it falls back to a free-text prompt. +# Reads bay-config.csv on the PXE share to build the menu of known bays. +# Falls back to INDEX.csv (cal-disc index) if bay-config.csv is missing. +# Operator picks with Up/Down arrows + Enter. Always appends an +# "Other (new bay)" option at the end for unlisted bays - selecting it +# falls back to a free-text prompt. # # Writes the chosen asset tag to $OutFile (one line, no trailing newline). # startnet.cmd reads that file back into the MACHINENUM batch var. @@ -14,10 +15,10 @@ # Exit codes: # 0 = asset tag written to $OutFile # 1 = user cancelled (Esc) - $OutFile not written -# 2 = INDEX.csv unreadable AND no fallback entered +# 2 = no readable bay source AND no fallback entered param( - [string]$IndexPath = 'Y:\installers-post\waxtrace\calibrations\INDEX.csv', + [string]$IndexPath = 'Y:\installers-post\waxtrace\bay-config.csv', [Parameter(Mandatory=$true)][string]$OutFile ) @@ -27,31 +28,60 @@ function Read-BayList { param([string]$Path) if (-not (Test-Path -LiteralPath $Path)) { return @() } try { - return Import-Csv -LiteralPath $Path | - Select-Object -Property asset_tag, unit_serial, probe_part | - Sort-Object -Property asset_tag -Descending + $rows = @(Import-Csv -LiteralPath $Path) + # bay-config.csv has asset_tag,ftpak_version,model,user_id,hw_sn,hw_id,host,notes + # INDEX.csv (legacy) has asset_tag,unit_serial,probe_part,... + $isBayCfg = $rows.Count -gt 0 -and ($rows[0].PSObject.Properties.Name -contains 'ftpak_version') + return $rows | Sort-Object -Property asset_tag | ForEach-Object { + if ($isBayCfg) { + [PSCustomObject]@{ + asset_tag = $_.asset_tag + col1 = $_.ftpak_version + col2 = $_.model + col3 = $_.user_id + schema = 'bay-config' + } + } else { + [PSCustomObject]@{ + asset_tag = $_.asset_tag + col1 = $_.unit_serial + col2 = $_.probe_part + col3 = '' + schema = 'index' + } + } + } } catch { return @() } } function Show-Menu { - param( - [object[]]$Items, - [int]$Selected, - [string]$Title - ) + param([object[]]$Items, [int]$Selected, [string]$Title, [string]$Schema) Clear-Host Write-Host "" - Write-Host " ========================================" + Write-Host " ============================================================" Write-Host " $Title" - Write-Host " ========================================" + Write-Host " ============================================================" Write-Host "" Write-Host " Up / Down arrows = navigate, Enter = select, Esc = cancel" Write-Host "" + if ($Schema -eq 'bay-config') { + Write-Host (" {0,-10} {1,-8} {2,-10} {3}" -f 'ASSET','FTPAK','MODEL','USER ID') + Write-Host (" {0,-10} {1,-8} {2,-10} {3}" -f '-----','-----','-----','-------') + } else { + Write-Host (" {0,-10} {1,-14} {2}" -f 'ASSET','SERIAL','PROBE') + Write-Host (" {0,-10} {1,-14} {2}" -f '-----','------','-----') + } for ($i = 0; $i -lt $Items.Count; $i++) { $item = $Items[$i] - $line = if ($item -is [string]) { $item } else { "{0,-10} serial={1,-12} probe={2}" -f $item.asset_tag, $item.unit_serial, $item.probe_part } + if ($item -is [string]) { + $line = $item + } elseif ($Schema -eq 'bay-config') { + $line = "{0,-10} {1,-8} {2,-10} {3}" -f $item.asset_tag, $item.col1, $item.col2, $item.col3 + } else { + $line = "{0,-10} {1,-14} {2}" -f $item.asset_tag, $item.col1, $item.col2 + } if ($i -eq $Selected) { Write-Host (" > " + $line) -ForegroundColor Black -BackgroundColor White } else { @@ -61,21 +91,31 @@ function Show-Menu { Write-Host "" } +# Try bay-config.csv first; fall back to INDEX.csv if missing OR if the +# explicit -IndexPath argument points to INDEX.csv (legacy callers). $bays = @(Read-BayList -Path $IndexPath) +if ($bays.Count -eq 0 -and $IndexPath -notmatch 'INDEX\.csv$') { + $fallback = 'Y:\installers-post\waxtrace\calibrations\INDEX.csv' + if (Test-Path -LiteralPath $fallback) { + Write-Host " (no bay-config.csv at $IndexPath - falling back to $fallback)" + $bays = @(Read-BayList -Path $fallback) + } +} +$schema = if ($bays.Count -gt 0) { $bays[0].schema } else { 'bay-config' } + $menuItems = @() foreach ($b in $bays) { $menuItems += $b } $menuItems += '** Other (new bay - enter asset tag manually) **' $sel = 0 while ($true) { - Show-Menu -Items $menuItems -Selected $sel -Title "Wax/Trace Asset Tag" + Show-Menu -Items $menuItems -Selected $sel -Title 'Wax/Trace Asset Tag' -Schema $schema $key = [System.Console]::ReadKey($true) switch ($key.Key) { 'UpArrow' { if ($sel -gt 0) { $sel-- } } 'DownArrow' { if ($sel -lt ($menuItems.Count - 1)) { $sel++ } } 'Enter' { if ($sel -eq ($menuItems.Count - 1)) { - # Manual entry Write-Host "" $manual = Read-Host " Enter asset tag (e.g. WJRP9999) or blank to abort" if ($manual) { diff --git a/playbook/shopfloor-setup/gea-shopfloor-waxtrace/bay-config.csv b/playbook/shopfloor-setup/gea-shopfloor-waxtrace/bay-config.csv index 83b4462..137c585 100644 --- a/playbook/shopfloor-setup/gea-shopfloor-waxtrace/bay-config.csv +++ b/playbook/shopfloor-setup/gea-shopfloor-waxtrace/bay-config.csv @@ -1,16 +1,18 @@ -asset_tag,ftpak_version,model,user_id -WJF00159,6.103,AVANT,3974839712 -WJRP3689,5.510,CV-4500,3744284509 -WJRP2660,6.0,CV-4500,2365986521 -WJRP2659,6.0,CV-4500,2709054503 -WJF00545,6.213,AVANT,3878777362 -WJRP3638,5.602,CV-4500,0720778210 -WJF00052,6.103,AVANT,3270314998 -WJF00084,6.103,AVANT,1476212857 -WJF00083,6.103,AVANT,2934506987 -WJRP3025,6.0,CV-3200,2292822471 -WJF00197,6.104,AVANT,1191612605 -WJRP4802,6.002,AVANT,0920866935 -WJRP2347,6.0,CV-4500,3585172946 -WJRP2035,6.0,CV-4500,2292822471 -WJRP2335,6.0,CV-4500,1780916688 +asset_tag,ftpak_version,model,user_id,hw_sn,hw_id,host,notes +WJF00052,6.103,CV-4500,3270314998,100032204,00039188,G2ZTNCX3ESF,bay-config was AVANT - corrected to CV-4500 per device-map +WJF00083,6.103,AVANT,2934506987,100062206,00039341,GDMT28Y3ESF, +WJF00084,6.103,AVANT,1476212857,100042205,00039348,G2GY4SY3ESF, +WJF00159,6.103,AVANT,3974839712,100072210,00040145,G5PRTW04ESF, +WJF00197,6.104,AVANT,1191612605,300022404,00041459,GHNWYRT3ESF, +WJF00450,6.204,AVANT,MISSING_DATA,400052411,MISSING_DATA,G8KRCPZ3ESF,DO NOT MIGRATE - user_id + hw_id need dongle read +WJF00461,6.213,AVANT,3878777362,400012504,00044757,G2PMG3D4ESF,new bay (was misattributed to WJF00545 in old CSV) +WJF00545,6.213,AVANT,3268459559,500022512,00045652,G6MJG3D4ESF,user_id refreshed 2026-05-24 (was 3878777362) +WJRP0423,6.0,CV-3100,3669340917,720104,00025834,GGDBWRT3ESF,old bay - device-map name 'NewCVSV' is Mitutoyo internal for CV-3100 +WJRP2035,6.0,CV-4500,2292822471,200011406,0008232,G6W7JK44ESF,live binary is 5.7.0.82 - migrating to original 6.0 target +WJRP2335,6.0,CV-4500,1780916688,800011510,00011911,G4B48FZ3ESF,live binary is 5.7.0.82 - migrating to original 6.0 target +WJRP2347,6.0,CV-4500,3585172946,800021510,00011674,GDR6B8B3ESF,live binary is 5.7.0.82 - migrating to original 6.0 target +WJRP2659,6.0,CV-4500,2709054503,000021608,00015700,G33N20R3ESF,live binary is 5.7.0.82 - migrating to original 6.0 target +WJRP2660,6.0,CV-4500,236598621,000011607,00015588,GGGMF1V3ESF,live binary is 5.7.0.92 - migrating to original 6.0 target +WJRP3638,5.602,CV-4500,0720778210,400031808,00024395,GFDBWRT3ESF, +WJRP3689,5.510,CV-4500,3744284509,400021807f,00024390,G4HCKF33ESF,live binary is 5.6.0.40 (release 5.602) - migrating to original 5.510 target +WJRP4802,6.002,AVANT,0920866935,100062108,00034683,G5W7R704ESF,live binary is 5.7.0.92 - migrating to original 6.002 target diff --git a/playbook/startnet.cmd b/playbook/startnet.cmd index e791ac0..bc0d3b3 100644 --- a/playbook/startnet.cmd +++ b/playbook/startnet.cmd @@ -214,7 +214,7 @@ REM net use Y: will be a no-op if Y: is already mapped. net use Y: \\172.16.9.1\enrollment /user:pxe-upload pxe /persistent:no >NUL 2>NUL del X:\waxtrace-asset.txt 2>NUL if not exist "Y:\installers-post\waxtrace\select-waxtrace-asset.ps1" goto waxtrace_picker_skip -powershell.exe -NoProfile -ExecutionPolicy Bypass -File "Y:\installers-post\waxtrace\select-waxtrace-asset.ps1" -IndexPath "Y:\installers-post\waxtrace\calibrations\INDEX.csv" -OutFile "X:\waxtrace-asset.txt" +powershell.exe -NoProfile -ExecutionPolicy Bypass -File "Y:\installers-post\waxtrace\select-waxtrace-asset.ps1" -IndexPath "Y:\installers-post\waxtrace\bay-config.csv" -OutFile "X:\waxtrace-asset.txt" :waxtrace_picker_skip set MACHINENUM= if exist X:\waxtrace-asset.txt set /p MACHINENUM=