feature(oem): OEM hybrid management pattern + Dell prototype#69
Conversation
Adds the OEM hybrid management pattern: orchestrator + vendor-tool leaves + inline-config leaves, with shared helpers fetched at runtime from jsDelivr (lib-bootstrap pattern from #68) and SHA256 verification. Dell is the prototype implementation. HP and Lenovo follow-up issues will replicate this shape. Components: - oem-shared/lib/oem-manufacturer-detect.ps1 (Get-OEMManufacturer, Get-VerifiedDownload) ... reusable across OEM scripts - oem-dell/dell-baseline.ps1 ... orchestrator, detects + dispatches - oem-dell/dell-command-update-install.ps1 ... idempotent DCU install - oem-dell/dell-command-update-run.ps1 ... DCU /scan + /applyUpdates with parsed exit codes - oem-dell/dell-bios-config.ps1 ... cctk policy push - oem-dell/dell-debloat.ps1 ... remove Dell consumer software, keep enterprise vendor tools - oem-dell/lib/dell-detection.ps1 ... Dell-specific detection helpers Conventions: $env:VAR contract everywhere, $env:RMM compared against "1", three-section structure, Start-Transcript / Stop-Transcript with TranscriptStarted guard (#34 pattern), camelCase variables, kebab-case filenames. TODOs: SHA256 placeholders for all jsDelivr URLs (libs + leaves + .cctk policy file) and the DCU installer URL/hash need to be captured once those assets land on the @Release tag. Each is marked with an explicit TODO comment in code.
There was a problem hiding this comment.
Code review is billed via overage credits. To resume reviews, an organization admin can raise the monthly limit at claude.ai/admin-settings/claude-code.
Once credits are available, push a new commit or reopen this pull request to trigger a review.
|
Closing in favor of the OEM redo design captured at #74. The original approach (runtime lib bootstrap via jsDelivr, "baseline" naming with static policy files, hash placeholders) is being replaced with CI-generated fat scripts, internet check only at the install step, and RMM-env-var-driven Branch retained ... cherry-pick anything worth preserving from the new PR's branch. |
Summary
Lands the OEM hybrid management pattern with Dell as the prototype implementation. The pattern splits OEM endpoint management into two layers:
Phase 1 (this PR): the shape + the Dell side. Phase 2 (separate issues): HP + Lenovo replications.
Shape
The orchestrator (
dell-baseline.ps1) is the only script NinjaRMM is expected to schedule. It detects the manufacturer, exits cleanly on non-Dell hardware, and gates each leaf behind an RMM env var (RunDCUInstall,RunDCURun,RunDellBiosConfig,RunDellDebloat). Status flows to a Ninja text custom field (dellBaselineStatusby default).Each leaf is also independently runnable. NinjaRMM downloads one script (the orchestrator or a leaf); shared libs are pulled at runtime from jsDelivr at the
@releasetag and SHA256-verified before dot-sourcing. Bootstrap shape follows PR #68.Conventions followed
developmentper the new default branch.$env:VARcontract for every RMM-supplied variable;$env:RMMcompared against string"1".script-template-powershell.ps1.Start-Transcript/Stop-Transcriptwith the$TranscriptStartedguard from PR Fix Stop-Transcript error when transcript not active #34.feature/branch prefix per the four-prefix taxonomy (Change Taxonomy).category-vendorfolder names.Research confirmed
FGK9X(UWP) andRXT5N(Classic). Source: Dell KB 000177325./s(with optional/l=<path>for log). Source: DCU 5.x silent install guide.dcu-cli.exelives at%ProgramFiles%\Dell\CommandUpdate\dcu-cli.exe. Exit codes for/applyUpdatesparsed into human strings in the run script (Source: DCU 5.x reference).cctk.exeships with Dell Command Configure at%ProgramFiles%\Dell\Command Configure\X86_64\cctk.exe(orX86on 32-bit). Policy applied with--infile=<path>(Source: DCC 4.1 user guide).DellInc.DellMobileConnect,DellInc.MyDell, etc.TBD (TODO markers in code)
These are all pinned with
REPLACE_WITH_REAL_HASHplaceholders and explicit TODO comments. They need to be captured once the libs and policy file land on the@releasetag and the canonical DCU installer URL is locked in.oem-shared/lib/oem-manufacturer-detect.ps1at@release.oem-dell/lib/dell-detection.ps1at@release.@release(orchestrator fetches them by URL + hash).dl.dell.comURL. Real URL needs to be captured from the FGK9X/RXT5N driver page and pinned, then SHA256'd.oem-dell/policy/dtc-baseline.cctk... the policy file itself doesn't exist yet. Author it from Dell Command Configure GUI on a reference endpoint, commit it, capture its SHA256.Test plan
Manual on a Dell endpoint (no DTC-managed Dell available to me at PR-open time):
dell-baseline.ps1on a non-Dell endpoint exits 0 with "Skipped: not Dell" status.dell-baseline.ps1on a Dell endpoint with no DCU installed triggersdell-command-update-install.ps1, verifies install, runsdell-command-update-run.ps1.dell-command-update-install.ps1is idempotent: second run finds DCU at target version, skips.dell-command-update-run.ps1returns the correct exit code (0 success, 1 reboot required) and the run-script parses the code into a human string.dell-debloat.ps1removes SupportAssist and Dell Mobile Connect; leaves Dell Command Update + Dell Command Configure installed.dell-bios-config.ps1applies a test.cctkfile via cctk.dellBaselineStatusupdates after a baseline run.Follow-ups
Two issues filed to replicate this pattern:
Both issues reference this PR as the canonical prototype.