GE-Enforce: backfill Keyence pc-subtype.txt from installed ProductCode
Pre-2026-05 Keyence images didn't write pc-subtype.txt via startnet.cmd. Without a subtype the share manifest's per-model PCTypes gate falls back to the default (VR-6000), causing the wrong model to install on VR-3000 / VR-5000 boxes. Detect the installed VR-3000/5000/6000 by its uninstall ProductCode and persist the subtype so subsequent GE-Enforce cycles + the share manifest gate route correctly.
This commit is contained in:
@@ -76,6 +76,40 @@ $pcType = (Get-Content -LiteralPath $pcTypeFile -First 1 -ErrorAction Silentl
|
|||||||
$pcSubType = if (Test-Path $pcSubTypeFile) {
|
$pcSubType = if (Test-Path $pcSubTypeFile) {
|
||||||
(Get-Content -LiteralPath $pcSubTypeFile -First 1 -ErrorAction SilentlyContinue).Trim()
|
(Get-Content -LiteralPath $pcSubTypeFile -First 1 -ErrorAction SilentlyContinue).Trim()
|
||||||
} else { '' }
|
} else { '' }
|
||||||
|
|
||||||
|
# Backfill pc-subtype.txt on Keyence PCs imaged before 2026-05 (startnet.cmd
|
||||||
|
# didn't write pc-subtype.txt for Keyence then). Without a subtype, the share
|
||||||
|
# manifest's per-model PCTypes gate falls back to installing the default model
|
||||||
|
# (VR-6000) on top of VR-3000 / VR-5000 boxes. Detect the installed model from
|
||||||
|
# its uninstall ProductCode and persist the subtype so subsequent GE-Enforce
|
||||||
|
# cycles + the share manifest gate route correctly.
|
||||||
|
if ($pcType -ieq 'keyence' -and -not $pcSubType) {
|
||||||
|
$keyenceProducts = @(
|
||||||
|
@{ Subtype = 'vr3000'; Path = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{9CC9A062-2A93-4D3B-AECA-F70C691A46F2}' },
|
||||||
|
@{ Subtype = 'vr5000'; Path = 'HKLM:\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Uninstall\{AF7E8B93-DBEB-4DB1-91CB-4DA592D8E222}' },
|
||||||
|
@{ Subtype = 'vr6000'; Path = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\{058E7194-BDF8-4FA2-9D69-978BB0F25214}' }
|
||||||
|
)
|
||||||
|
foreach ($p in $keyenceProducts) {
|
||||||
|
if (Test-Path -LiteralPath $p.Path) {
|
||||||
|
$pcSubType = $p.Subtype
|
||||||
|
try {
|
||||||
|
$enrollDir = Split-Path -Parent $pcSubTypeFile
|
||||||
|
if (-not (Test-Path -LiteralPath $enrollDir)) {
|
||||||
|
New-Item -Path $enrollDir -ItemType Directory -Force | Out-Null
|
||||||
|
}
|
||||||
|
Set-Content -LiteralPath $pcSubTypeFile -Value $pcSubType -Encoding ascii -Force
|
||||||
|
Write-EnforceLog "Backfilled pc-subtype.txt = $pcSubType from installed product code"
|
||||||
|
} catch {
|
||||||
|
Write-EnforceLog "pc-subtype.txt backfill write failed: $_" 'WARN'
|
||||||
|
}
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (-not $pcSubType) {
|
||||||
|
Write-EnforceLog "Keyence PC with no pc-subtype.txt and no recognized VR product installed - skipping model-gated apps until imaging populates subtype" 'WARN'
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
Write-EnforceLog "PCType: $pcType$(if ($pcSubType) { " / $pcSubType" })"
|
Write-EnforceLog "PCType: $pcType$(if ($pcSubType) { " / $pcSubType" })"
|
||||||
|
|
||||||
# --- site-config ---
|
# --- site-config ---
|
||||||
|
|||||||
Reference in New Issue
Block a user