Add a markdown or .ps1 file, preview locally, and open a pull request. The site picks up new files automatically. Do not edit navigation lists or hardcode titles in templates.
The fastest way to fix a typo is the Edit this page on GitHub link at the bottom of every page.
Requires Node.js 22 or later (see .nvmrc). PowerShell tests need Pester 5+ and PSScriptAnalyzer.
npm install
npm startOpen http://localhost:8080.
CI runs all of these. Run them before you open a PR.
| Command | What it checks |
|---|---|
npm run hygiene |
No local user paths, tokens, or keys in any tracked file |
npm run validate |
Frontmatter is complete; builder templates quote text fields; one .ps1 per script folder |
npm test |
Builder rendering and escaping (Node) |
npm run build:gh then npm run check-links |
Every internal link and asset resolves |
npm run a11y (after npm run build:gh) |
axe accessibility check of every page, light and dark. Needs npx playwright install chromium once |
./tests/run.ps1 -Lint |
Pester tests for every script, every snippet on the site parses, builder output runs against a test folder, PSScriptAnalyzer |
Install the PowerShell test tools once:
Install-Module Pester -MinimumVersion 5.5.0 -Scope CurrentUser -Force -SkipPublisherCheck
Install-Module PSScriptAnalyzer -RequiredVersion 1.25.0 -Scope CurrentUser -ForceCI runs the PowerShell tests on both Windows PowerShell 5.1 and PowerShell 7. If you can, run ./tests/run.ps1 in both.
- Copy
commands/_template.mdtocommands/your-cmdlet.md. - Fill in every required frontmatter field:
title,cmdlet,aliases,category,difficulty,topics,command,summary,module(the module the cmdlet ships in, for exampleMicrosoft.PowerShell.Management), andplatforms(any ofwindows,linux,macos, as a list like[windows, linux, macos]). Usetopicsfor keywords. Do not use Eleventytags. - Use placeholder paths only:
.\docs,$env:TEMP,C:\Path\To\Folder. - Run
npm run validate, thennpm start, and confirm the command appears under/commands/.
category is a slug. Known labels: files, text, system, network, help. A new slug works, but validation warns so typos get caught.
- Create
scripts/your-script-name/. - Add
your-script-name.ps1with comment-based help and[CmdletBinding()]. Use[CmdletBinding(SupportsShouldProcess)]and support-WhatIfonly if the script changes files or system state. Read-only scripts should not take-WhatIf. - Add
index.mdusingscripts/_template.mdas the frontmatter guide. Theparameterslist must match the script'sparam()block exactly; a test checks it. - Parameters only. No hardcoded machine names, user folders, or secrets.
- Add a
Describeblock for it intests/Scripts.Tests.ps1that runs it against a folder in$TestDrive.
- Copy
builders/_template.mdtobuilders/your-builder.md. - Define
fieldsand atemplate. The template file explains the placeholder rules. The important one: insert text fields as{{name:q}}, which quotes them safely for PowerShell. Validation fails otherwise. npm testand./tests/run.ps1render your builder with tricky input ($, quotes, brackets) and check that the output still parses.
- Add
guides/your-guide.mdwithtitle,summary,order, andtopics. - Lower
ordersorts earlier. - Use
topicsfor keywords. Do not use Eleventytags.tagswould dump the page into extra collections and fail CI.
- Real user paths (anything inside your own Windows or macOS profile folder). Use
$HOME,$env:TEMP, or.\docsinstead. - Credentials, tokens, API keys,
.envfiles - Transcripts, CLIXML dumps, local profiles
node_modules/or_site/
CI fails the build if content matches those patterns.
The workflow deploys on push to main. One-time setup in the repo: Settings > Pages > Source > GitHub Actions.