____ _ _ ____ ___ | _ \| | __ _ ___| |_ ___ _ __ |___ \ / _ \ | |_) | |/ _` / __| __/ _ \ '__| __) | | | | | __/| | (_| \__ \ || __/ | / /| |_| | / |_| |_|\__,_|___/\__\___|_| |____|\___/
The Template Engine
for PowerShell
Scaffold projects, modules, and files with customizable templates. Now with JSON support, cross-platform compatibility, and modern tooling.
Install-Module
-Name Plaster
-Scope CurrentUserWhy Plaster?
Stop writing boilerplate. Start scaffolding with confidence.
Consistent Projects
Generate modules, scripts, DSC configurations, and any file structure from reusable templates. Every project starts right.
JSON & XML Manifests
Author templates in clean JSON with full VS Code IntelliSense, or use the traditional XML format. Your choice.
Cross-Platform
Full support for Windows, Linux, and macOS. Works with PowerShell 5.1 and PowerShell 7.x.
Interactive & Scriptable
Use interactively with guided prompts, or pass parameters on the command line for fully automated scaffolding in CI/CD.
Module Integration
Embed templates inside PowerShell modules and distribute them through the PowerShell Gallery. Templates travel with your tools.
Smart Conditionals
Include or exclude files based on user choices. Build dynamic templates with conditions, validation, and dependencies.
Pick Your Format
Plaster 2.0 introduces JSON manifests alongside traditional XML. Same power, cleaner syntax.
{
"schemaVersion": "2.0",
"metadata": {
"name": "MyModule",
"id": "a1b2c3d4-...",
"version": "1.0.0",
"title": "New PowerShell Module"
},
"parameters": [
{
"name": "ModuleName",
"type": "text",
"prompt": "Enter module name"
},
{
"name": "Features",
"type": "multichoice",
"default": [0, 1],
"choices": [
{"label": "&Tests", "value": "Tests"},
{"label": "&Build", "value": "Build"}
]
}
],
"content": [
{
"type": "templateFile",
"source": "Module.psm1",
"destination": "src/${ModuleName}.psm1"
}
]
}<?xml version="1.0" encoding="utf-8"?>
<plasterManifest schemaVersion="1.2"
xmlns="http://www.microsoft.com/
schemas/PowerShell/Plaster/v1">
<metadata>
<name>MyModule</name>
<id>a1b2c3d4-...</id>
<version>1.0.0</version>
<title>New PowerShell Module</title>
</metadata>
<parameters>
<parameter name="ModuleName"
type="text"
prompt="Enter module name" />
<parameter name="Features"
type="multichoice" default="0,1">
<choice label="&Tests"
value="Tests" />
<choice label="&Build"
value="Build" />
</parameter>
</parameters>
<content>
<templateFile source="Module.psm1"
destination=
"src/${PLASTER_PARAM_ModuleName}.psm1"/>
</content>
</plasterManifest>| Feature | JSON | XML |
|---|---|---|
| Variable Syntax | ${Name} | ${PLASTER_PARAM_Name} |
| Multichoice Defaults | [0, 1, 2] | "0,1,2" |
| VS Code IntelliSense | Limited | |
| Special Char Escaping | Not needed | & < |
| Schema Validation | JSON Schema | XSD |
Quick Start
Three commands to your first scaffolded project.
Discover available templates
Get-PlasterTemplateScaffold a new module interactively
$template= Get-PlasterTemplate | Where-Object Name -eq NewPowerShellModuleInvoke-Plaster-TemplatePath $template.TemplatePath ` -DestinationPath .\MyNewModule
Or create your own template
New-PlasterManifest-TemplateName MyTemplate ` -TemplateType Project -Format JSON
Commands
Four cmdlets. Everything you need.
Invoke-PlasterExecute a template to generate files. Handles parameters, conditions, file copying, template expansion, and module manifest creation.
New-PlasterManifestCreate a new template manifest file in JSON or XML format. Optionally auto-discover content files in the template directory.
Test-PlasterManifestValidate a manifest file for correctness. Checks schema compliance, parameter defaults, conditions, and interpolated values.
Get-PlasterTemplateDiscover templates on disk, recursively, or embedded inside installed PowerShell modules. Filter by name or tag.
Platform Support
Plaster 2.0 runs everywhere PowerShell runs.
| PowerShell | Windows | Linux | macOS |
|---|---|---|---|
| 7.0+ | |||
| 5.1 (Desktop) | — | — |
Ready to scaffold?
Install Plaster from the PowerShell Gallery and create your first template in minutes.