Shopfloor images: add Wax/Trace + Keyence per-model variants
Wax/Trace (gea-shopfloor-waxtrace): - captured/ holds master FormTracePak v6.0 state (Program Files reg dump gzipped, ARP entries) taken from a win11 VM where the CD-ROM-bound VB6 wrapper was driven to completion. xcopy + reg-import replays the install on real bays without running the wrapper itself. - 09-Setup-WaxAndTrace.ps1 rewrites the stub: installs prereqs via manifest (VC++ 2008/2017 x86+x64, Sentinel HASP), expands the captured zips into C:\Program Files (x86)\MitutoyoApp + C:\MitutoyoApp, imports the reg hive, then mounts the bay's per-machine cal ISO (matched by asset tag in machine-number.txt) and runs its Setup.exe. - waxtrace-manifest.json lists the 5 prereqs with InstallShield-style silent flags verified on the win11 VM. - sync-waxtrace.sh ships captured-binary/ + prereqs + cal ISOs from /home/camp/pxe-images/iso/mitutoyo-cal/ to /srv/samba/enrollment/installers-post/waxtrace/ on the PXE box. - select-waxtrace-asset.ps1 arrow-key bay picker for WinPE (parses INDEX.csv from the cal share, offers "Other (new bay)" fallback). - startnet.cmd: prompt_waxtrace_asset prompt, skip_waxtrace_stage xcopy block (mirrors :skip_cmm_stage), machine-number.txt write covers bay asset tag (WJRP*). Keyence (gea-shopfloor-keyence) - now multi-model: - vr3000/manifest.json + vr5000/manifest.json + vr6000/manifest.json (current single-model VR-6000 moved into vr6000/ subdir). Each ships the model's MSI silent-install + DetectionPath via ProductCode. Big payloads (Data1.cab, Data11.cab) gitignored, staged via sync-keyence.sh from /home/camp/pxe-images/iso/keyence/. - 09-Setup-Keyence.ps1 dispatches by C:\Enrollment\keyence-model.txt (written by startnet.cmd in :keyence_submenu) and points InstallerRoot at C:\KeyenceInstall\<model>. DXSETUP probe widened to all three Program Files paths (VR-3000 G2, VR-5000, VR-6000). - startnet.cmd: :keyence_submenu picks vr3000/vr5000/vr6000, :skip_keyence_stage xcopy block selectively stages chosen model bundle, pc-subtype.txt also written = drops directly into existing GE-Enforce PCSubType wiring (looks for gea-shopfloor-keyence-<model>\manifest.json on the tsgwp00525 share for ongoing enforcement, no dispatcher change needed). - sync-keyence.sh mirrors sync-waxtrace.sh pattern. Verified silent MSI install for VR-3000 G2 v2.5.0 and VR-5000 v3.3.1 on the win11 VM 2026-05-18 with /qn /norestart ALLUSERS=1 REBOOT=ReallySuppress TRANSFORMS=1033.mst. boot.wim on 172.16.9.1 wimupdate'd with the new startnet.cmd. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
100
playbook/select-waxtrace-asset.ps1
Normal file
100
playbook/select-waxtrace-asset.ps1
Normal file
@@ -0,0 +1,100 @@
|
||||
# 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.
|
||||
#
|
||||
# Writes the chosen asset tag to $OutFile (one line, no trailing newline).
|
||||
# startnet.cmd reads that file back into the MACHINENUM batch var.
|
||||
#
|
||||
# Runs in WinPE PowerShell. Win10/11 WinPE ships powershell.exe with
|
||||
# System.Console.ReadKey support. Tested 2026-05-18.
|
||||
#
|
||||
# Exit codes:
|
||||
# 0 = asset tag written to $OutFile
|
||||
# 1 = user cancelled (Esc) - $OutFile not written
|
||||
# 2 = INDEX.csv unreadable AND no fallback entered
|
||||
|
||||
param(
|
||||
[string]$IndexPath = 'Y:\installers-post\waxtrace\calibrations\INDEX.csv',
|
||||
[Parameter(Mandatory=$true)][string]$OutFile
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Continue'
|
||||
|
||||
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
|
||||
} catch {
|
||||
return @()
|
||||
}
|
||||
}
|
||||
|
||||
function Show-Menu {
|
||||
param(
|
||||
[object[]]$Items,
|
||||
[int]$Selected,
|
||||
[string]$Title
|
||||
)
|
||||
Clear-Host
|
||||
Write-Host ""
|
||||
Write-Host " ========================================"
|
||||
Write-Host " $Title"
|
||||
Write-Host " ========================================"
|
||||
Write-Host ""
|
||||
Write-Host " Up / Down arrows = navigate, Enter = select, Esc = cancel"
|
||||
Write-Host ""
|
||||
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 ($i -eq $Selected) {
|
||||
Write-Host (" > " + $line) -ForegroundColor Black -BackgroundColor White
|
||||
} else {
|
||||
Write-Host (" " + $line)
|
||||
}
|
||||
}
|
||||
Write-Host ""
|
||||
}
|
||||
|
||||
$bays = @(Read-BayList -Path $IndexPath)
|
||||
$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"
|
||||
$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) {
|
||||
$manual = $manual.Trim().ToUpper()
|
||||
Set-Content -LiteralPath $OutFile -Value $manual -NoNewline -Encoding ascii
|
||||
Write-Host ""
|
||||
Write-Host " Saved asset tag: $manual"
|
||||
Start-Sleep -Seconds 1
|
||||
exit 0
|
||||
} else {
|
||||
exit 1
|
||||
}
|
||||
} else {
|
||||
$pick = $bays[$sel].asset_tag
|
||||
Set-Content -LiteralPath $OutFile -Value $pick -NoNewline -Encoding ascii
|
||||
Write-Host ""
|
||||
Write-Host " Selected: $pick"
|
||||
Start-Sleep -Seconds 1
|
||||
exit 0
|
||||
}
|
||||
}
|
||||
'Escape' { exit 1 }
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user