Files
shopdb-flask/docs/GE-ENFORCE-DEPLOY.md
cproudlock 802256f929 docs: wiki update for API docs, printer installer, geenforce cutover, timezone
Execute WIKI-UPDATE-PLAN.md (14 items):
- NEW docs/PRINTER-INSTALLER.md: install-list / pc-default / install-batch
  contract + public installer map page.
- NEW-shape docs/API-REFERENCE.md: index + pointer to the live generated docs
  (/api/docs Redoc, openapi.json, llms.txt, MCP), replacing a stale full dump.
- geenforce cutover + GE-ENFORCE-DISPLAY/CLIENT/DEPLOY: server-first display
  dispatcher (display-role by FQDN, display-type.txt fallback), dashboarddefaults
  FQDN keying, legacy kiosk autostart self-heal (Wow6432Node), per-PC-type
  cutover status.
- PLUGINS: printers/slides rows + plugin-permissions note (slides.manage).
- IMPORT-API: dashboarddefaults FQDN-first keying.
- CONFIG: word-wise search, site_timezone setting.
- PILOT-DEPLOY: servers-to-network reclassify step. IMPORT-ADOPTION: fixup note.
- CLAUDE.md: test count 1077->1159, HTTPS-cutover state. CHANGELOG: timezone +
  kiosk-autostart fixes, site_timezone setting.
2026-07-30 16:05:21 -04:00

6.2 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:

  1. 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.
  2. Identity in C:\Enrollment - so the PC knows what it is (see section 2).
  3. 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)

  1. Writes the C:\Enrollment identity files (section 2).
  2. Writes HKLM:\SOFTWARE\GE\ShopDB (BaseUrl + token) if provided.
  3. Copies the client kit (the two files shipped next to it) to -InstallRoot (default C:\ProgramData\GE-Enforce).
  4. If -EngineSource is given, copies GE-Enforce.ps1 + lib\Install-FromManifest.ps1.
  5. Registers the scheduled task (SYSTEM, at logon + every -IntervalMinutes) to run Invoke-ShopdbEnforce.ps1 -Scope <PCType> -EnginePath <engine>.

Re-running it updates identity/config and re-registers the task in place.

For PC types that have cut over to HTTPS manifest delivery (currently displays/kiosks), the full server-side setup, auth model (IP allowlist vs ApiToken), and per-PC-type cutover playbook live in geenforce-api-cutover.md. This doc covers what gets laid on the PC; that doc covers where the manifest comes from.


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 has GE-Enforce.ps1 and lib\Install-FromManifest.ps1 (e.g. your share's common dir), or
  • place the engine under <InstallRoot>\lib\Install-FromManifest.ps1 yourself 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.