Development

Documentation home Development Deployment Compatibility Validation

Use the shared Windows workstation guide for Git, GitHub CLI, editor setup, account checks, and the pinned validation modules. The deployment runtime is Windows PowerShell 5.1; PowerShell 7 is an optional development shell, not a replacement runtime.

Names and paths

Use the script’s filename in prose, banners, and the ConfigMgr Script name field. The recommended package source is the extracted Scripts directory, so the field does not need a directory prefix.

The repository keeps production code in Scripts, tests in Tests, development helpers in build, and guides in docs. Link labels can show a filename while the hyperlink still points to the correct source directory.

VS Code recommends the PowerShell extension for this workspace. Its Validate with Windows PowerShell 5.1 and Check generated banners tasks use the explicit Windows PowerShell executable, independent of your default terminal.

Terminal commands are different. PowerShell does not search the current directory for a script automatically, so copyable commands retain their real relative path:

.\build\Invoke-Validation.ps1

Do not confuse a ConfigMgr field value with an ordinary shell command. Existing packages rooted above Scripts still need a directory-qualified script-name field; see deployment.

Maintain the shared banner layout

The two OSD repositories use byte-identical build\Update-Banners.ps1 generators. Only assets\branding.json contains project-specific titles, descriptions, and the bare script filename.

.\build\Update-Banners.ps1
.\build\Update-Banners.ps1 -Check

Both wide banners are 1280 x 360; both compact banners are 640 x 360 at the same 720-pixel breakpoint. Fonts, coordinates, corner radius, owner line, and runtime/ license footer are shared. Banners deliberately omit release numbers and validation claims; the README badges and validation guide are the maintained source of status.

Keep intrinsic width, height, and viewBox in each SVG. In Markdown <picture> markup, keep the width attributes but omit height from both <source> and <img>: GitHub shrinks the width without automatically reducing a fixed HTML height. Small standalone icons still specify both dimensions. Check actual rendered image rectangles, not just the SVG metadata.

Keep generator changes synchronized between the two repositories. Update the source JSON rather than hand-editing an SVG. Tests\Branding.Tests.ps1 rejects stale generated bytes, layout drift, and directory prefixes in the filename label. README image URLs use the release version as a cache key.

Validate a change

Run the full validator in Windows PowerShell 5.1. Keep the existing parser, PSScriptAnalyzer, Pester, version/tag, and checksum gates. After any file changes, normalize line endings and regenerate CHECKSUMS.txt last using the documented release process. A banner-only change still changes source hashes and must not silently replace an already published release ZIP.