Closes the "how do sites actually deploy GE-Enforce" gap (esp. OOBE-ppkg sites without a PXE/WinPE step). Site-neutral + imaging-path independent. - plugins/geenforce/client/Install-GEEnforce.ps1: a bootstrap that writes the PC's identity (C:\Enrollment\pc-type.txt is what determines the PC type; plus machine-number/cmm version/cmm id/site-config as needed), sets the shopdb BaseUrl + token in HKLM:\SOFTWARE\GE\ShopDB, deploys the client kit, optionally copies the engine from -EngineSource, and registers the SYSTEM scheduled task (at logon + every N min). Idempotent; fails loud (installer, not the fail-safe runtime). Engine is REFERENCED not vendored - it belongs to the GE-Enforce framework; the script warns if absent but still labels the PC. - docs/GE-ENFORCE-DEPLOY.md: the deploy contract - the three things a PC needs (client, identity, credential), the identity table (what determines PC type, no auto-detection - the provisioner supplies it; shopdb cannot set it at imaging), and how to invoke per path (PXE step, OOBE ppkg via ProvisioningCommands, Intune, manual), the engine boundary, and verification. - Cross-linked from docs/GE-ENFORCE.md. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
5.9 KiB
Deploying the GE-Enforce agent on a PC
This is the deploy contract: what has to be laid down on a PC so GE-Enforce runs,
and how to do it regardless of imaging path (PXE, OOBE provisioning package,
Intune, or by hand). It complements docs/GE-ENFORCE.md (concepts) and
docs/GE-ENFORCE-CLIENT.md (the fetch/report contract).
The reference installer is plugins/geenforce/client/Install-GEEnforce.ps1. It
is site-neutral: you pass the PC's identity in, it writes the files/registry the
engine reads and registers the enforcement task.
1. What "deploying GE-Enforce" means
A PC needs three things present before enforcement works. HOW they get there is up to your imaging path; WHAT they are is fixed:
- The GE-Enforce client - the engine (
Install-FromManifest.ps1), the shopdb client kit (ShopdbEnforceClient.psm1,Invoke-ShopdbEnforce.ps1), and a scheduled task (at logon + periodic) that runs as SYSTEM. - Identity in
C:\Enrollment- so the PC knows what it is (see section 2). - A credential - the SFLD share credential (for a share-sourced manifest) and/or the shopdb service token (for the fetch/report client). This is what gates enforcement actually starting; until it exists the task exits 0 and retries.
Install-GEEnforce.ps1 lays down 1 and 2, and can write the shopdb token for 3.
The engine itself is the GE-Enforce framework's, not shopdb's - point the
installer at your copy with -EngineSource, or place it under the install root
first (see section 5).
2. Identity: how a PC determines its PC type (and bay)
There is NO auto-detection. The provisioner supplies the values; the engine only reads files. This is the core of "set the PC up to know its type."
| Value | Written to | Purpose | Required? |
|---|---|---|---|
| PC type | C:\Enrollment\pc-type.txt (first line) |
picks the manifest scope (gea-shopfloor-<type>) |
YES |
| Machine (bay) number | C:\Enrollment\machine-number.txt (fallback; DNC registry MachineNo wins) |
per-bay gates | only for bay-gated entries |
| CMM version | C:\Enrollment\cmm\version.txt |
_CmmVersion gating (CMM PCs) |
CMM only |
| CMM bay id | C:\Enrollment\cmm\cmmid.txt |
CMM bay identity | CMM only |
| Share root + site | C:\Enrollment\site-config.json |
where manifests/payloads live | for share-sourced |
| shopdb URL + token | HKLM:\SOFTWARE\GE\ShopDB (BaseUrl, ApiToken) |
fetch/report client | for shopdb client |
Valid pc-type values are the manifest scope names
(gea-shopfloor-cmm, -collections, -nocollections, -common, -keyence,
-genspect, -heattreat, -partmarker, -waxtrace) or a legacy alias the
engine maps (Standard, CMM, ...).
shopdb cannot set the type at imaging - a PC is not known to shopdb until it enrolls and reports. If you want the value to come from an asset system, pre-map asset-tag / hostname -> PC type in your provisioning and feed it to the installer.
3. Running it, per imaging path
Install-GEEnforce.ps1 is the same in every case; only how you invoke it differs.
PXE / imaging step (identity known at image time)
Run it as an imaging step after the OS lays down, passing the type the operator selected:
powershell -ExecutionPolicy Bypass -File Install-GEEnforce.ps1 `
-PCType gea-shopfloor-cmm -MachineNumber 0615 -CmmVersion 2019 `
-ShareRoot \\server\share\dt\shopfloor -Site "West Jefferson" `
-ShopdbUrl https://shopdb.site.geaerospace.net -ShopdbToken shopdb_pat_xxx `
-EngineSource \\server\share\dt\shopfloor\common
OOBE provisioning package (ppkg)
Sites that apply a ppkg during OOBE (no PXE/WinPE step) embed the installer + the
client kit in the ppkg and run it from a CommandLine / ProvisioningCommands
action. Supply the PC type from a ppkg variable, a first-boot prompt, or an
asset lookup:
powershell -ExecutionPolicy Bypass -File Install-GEEnforce.ps1 -PCType %PCTYPE% ...
Timing is forgiving: the scheduled task is fail-safe, so if OOBE finishes before Intune/DSC provisions the credential, enforcement simply waits and starts once the credential lands. There is no ordering trap.
Intune / manual
Same script as a Win32 app / remediation, or run by hand on an existing PC to
retrofit it. -NoTask provisions identity + kit without registering the task.
4. What the installer does (idempotent)
- Writes the
C:\Enrollmentidentity files (section 2). - Writes
HKLM:\SOFTWARE\GE\ShopDB(BaseUrl + token) if provided. - Copies the client kit (the two files shipped next to it) to
-InstallRoot(defaultC:\ProgramData\GE-Enforce). - If
-EngineSourceis given, copiesGE-Enforce.ps1+lib\Install-FromManifest.ps1. - Registers the scheduled task (SYSTEM, at logon + every
-IntervalMinutes) to runInvoke-ShopdbEnforce.ps1 -Scope <PCType> -EnginePath <engine>.
Re-running it updates identity/config and re-registers the task in place.
5. The engine boundary
shopdb ships the manifest store + client kit + this installer, not the
GE-Enforce engine (Install-FromManifest.ps1) or dispatcher - those live in
the GE-Enforce framework. So one of:
- pass
-EngineSource <path>pointing at a folder that hasGE-Enforce.ps1andlib\Install-FromManifest.ps1(e.g. your share'scommondir), or - place the engine under
<InstallRoot>\lib\Install-FromManifest.ps1yourself before enforcement runs.
The installer warns if the engine is missing but still provisions identity so a
PC is at least correctly labelled. Use engine lib >= 2.6 (required for the
_CmmVersion gate).
6. Verify a provisioned PC
Get-Content C:\Enrollment\pc-type.txt-> the expected scope.Get-ItemProperty HKLM:\SOFTWARE\GE\ShopDB-> BaseUrl + ApiToken set.Get-ScheduledTask GE-Enforce-> Ready.- Trigger it once and check the client log
(
C:\Logs\Shopfloor\shopdb-enforce-*.log), then confirm the PC appears under GE-Enforce > Enforcement Reports in shopdb with the right PC type.