Single-site bay-stuck issue at WJ: GE Intune Report IP script filters
Get-NetIPAddress on StartsWith("10.") and posts everything matching
to the GE Tines webhook. Bays at WJ get the PXE LAN 10.9.100.x IP
captured and reported -> GE backend tags bays as on a non-corp 10.x
subnet -> dynamic group eligibility for SFLD policy never matches.
Other GE sites work because their PXE LANs aren't on 10.x at all.
Renumber PXE LAN to RFC1918 172.16.9.0/24 so the GE filter naturally
skips wired PXE addresses without any disable-NIC dance.
Server-side already in flight (netplan dual-bound, dnsmasq scope +
boot URL repointed, blancco preferences + grub.cfg + iPXE GetPxeScript
all sed'd to 172.16.9.1). This commit is the playbook / scripts /
docs side: 109 hits across 35 files sed'd in one shot.
After this lands + boot.wim is rebuilt + bays renumber off DHCP,
the 10.9.100.1 binding will be dropped from netplan as the final
cleanup step.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
112 lines
4.4 KiB
PowerShell
112 lines
4.4 KiB
PowerShell
# 01-eDNC.ps1 - Install eDNC and deploy custom eMxInfo.txt (Standard-Machine only)
|
|
|
|
# --- Transcript ---
|
|
$logDir = 'C:\Logs\SFLD'
|
|
if (-not (Test-Path $logDir)) { try { New-Item -ItemType Directory -Path $logDir -Force | Out-Null } catch {} }
|
|
try { Start-Transcript -Path (Join-Path $logDir '01-eDNC.log') -Append -Force | Out-Null } catch {}
|
|
|
|
# --- Skip on Timeclock sub-type ---
|
|
$subtypeFile = 'C:\Enrollment\pc-subtype.txt'
|
|
if (Test-Path $subtypeFile) {
|
|
$subtype = (Get-Content $subtypeFile -First 1 -ErrorAction SilentlyContinue).Trim()
|
|
if ($subtype -eq 'Timeclock') {
|
|
Write-Host "=== eDNC Setup: skipped (Standard-Timeclock) ==="
|
|
try { Stop-Transcript | Out-Null } catch {}
|
|
return
|
|
}
|
|
}
|
|
|
|
Write-Host "=== eDNC Setup ==="
|
|
|
|
function Get-SiteConfig {
|
|
$configPath = 'C:\Enrollment\site-config.json'
|
|
if (-not (Test-Path -LiteralPath $configPath)) {
|
|
Write-Host "site-config.json not found - using defaults" -ForegroundColor DarkGray
|
|
return $null
|
|
}
|
|
try {
|
|
return (Get-Content -LiteralPath $configPath -Raw -ErrorAction Stop | ConvertFrom-Json)
|
|
} catch {
|
|
Write-Warning "Failed to parse site-config.json: $_"
|
|
return $null
|
|
}
|
|
}
|
|
$siteConfig = Get-SiteConfig
|
|
|
|
$siteName = if ($siteConfig) { $siteConfig.siteName } else { 'West Jefferson' }
|
|
$siteNameCompact = if ($siteConfig) { $siteConfig.siteNameCompact } else { 'WestJefferson' }
|
|
|
|
$edncDir = Join-Path $PSScriptRoot 'eDNC'
|
|
|
|
if (-not (Test-Path $edncDir)) {
|
|
Write-Warning "eDNC folder not found at $edncDir - skipping."
|
|
try { Stop-Transcript | Out-Null } catch {}
|
|
exit 0
|
|
}
|
|
|
|
# --- Find installer ---
|
|
# Filter is eDNC*.msi (no dash) so we match both vendor naming styles:
|
|
# eDNC-6.4.3.msi (dash) and eDNC_6-4-5.msi (underscore). Imaging dir should
|
|
# only contain ONE version at a time; rollback to a prior version is handled
|
|
# post-imaging via the SFLD share's standard-machine/apps/ alternates.
|
|
$edncMsi = Get-ChildItem -Path $edncDir -Filter "eDNC*.msi" | Select-Object -First 1
|
|
$emxInfo = Join-Path $edncDir "eMxInfo.txt"
|
|
|
|
# --- 1. Install eDNC ---
|
|
if ($edncMsi) {
|
|
Write-Host "Installing eDNC: $($edncMsi.Name)..."
|
|
$p = Start-Process -FilePath "msiexec.exe" -ArgumentList "/i `"$($edncMsi.FullName)`" /qn /norestart LAUNCHNTLARS=false SITESELECTED=`"$siteName`"" -Wait -PassThru
|
|
Write-Host " eDNC exit code: $($p.ExitCode)"
|
|
} else {
|
|
Write-Warning "eDNC installer not found in $edncDir (expected eDNC*.msi)"
|
|
}
|
|
|
|
# --- 2. Mirror x86 install to 64-bit Program Files (app uses hardcoded paths) ---
|
|
# mxTransactionDll.dll references \Dnc\Server Files\
|
|
$copies = @(
|
|
@{ Src = "C:\Program Files (x86)\Dnc"; Dst = "C:\Program Files\Dnc" }
|
|
)
|
|
foreach ($c in $copies) {
|
|
if (Test-Path $c.Src) {
|
|
if (-not (Test-Path $c.Dst)) {
|
|
New-Item -Path $c.Dst -ItemType Directory -Force | Out-Null
|
|
}
|
|
Copy-Item -Path "$($c.Src)\*" -Destination $c.Dst -Recurse -Force
|
|
Write-Host " Copied $($c.Src) -> $($c.Dst)"
|
|
}
|
|
}
|
|
|
|
# --- 3. Set DNC site + machine number ---
|
|
$regBase = "HKLM\SOFTWARE\WOW6432Node\GE Aircraft Engines\DNC"
|
|
reg add "$regBase\General" /v Site /t REG_SZ /d $siteNameCompact /f | Out-Null
|
|
Write-Host " DNC site set to $siteNameCompact."
|
|
|
|
# Set machine number if tech entered one during PXE menu (defaults to 9999)
|
|
$machineNumFile = 'C:\Enrollment\machine-number.txt'
|
|
$machineNum = '9999'
|
|
if (Test-Path -LiteralPath $machineNumFile) {
|
|
$num = (Get-Content -LiteralPath $machineNumFile -First 1 -ErrorAction SilentlyContinue).Trim()
|
|
if ($num -and $num -match '^\d+$') { $machineNum = $num }
|
|
}
|
|
reg add "$regBase\General" /v MachineNo /t REG_SZ /d $machineNum /f | Out-Null
|
|
Write-Host " DNC MachineNo set to $machineNum."
|
|
|
|
# --- 4. Deploy custom eMxInfo.txt to both Program Files paths ---
|
|
if (Test-Path $emxInfo) {
|
|
$dest86 = "C:\Program Files (x86)\DNC\Server Files"
|
|
$dest64 = "C:\Program Files\DNC\Server Files"
|
|
|
|
foreach ($dest in @($dest86, $dest64)) {
|
|
if (-not (Test-Path $dest)) {
|
|
New-Item -Path $dest -ItemType Directory -Force | Out-Null
|
|
}
|
|
Copy-Item -Path $emxInfo -Destination (Join-Path $dest "eMxInfo.txt") -Force
|
|
Write-Host " eMxInfo.txt -> $dest"
|
|
}
|
|
} else {
|
|
Write-Warning "eMxInfo.txt not found at $emxInfo"
|
|
}
|
|
|
|
Write-Host "=== eDNC Setup Complete ==="
|
|
try { Stop-Transcript | Out-Null } catch {}
|