Home

Awesome

Build status

Forge Generator for PowerShell modules

This module contains Forge generators for PowerShell modules. New-ForgeModule generates a new module and New-ForgeModuleFunction generates a new function inside an already created module.

The generator is still quite new (and probably a bit opinionated) parts of the structure come from the excellent https://github.com/devblackops/NetScaler module and quite a bit of the rest comes from another similar project https://github.com/PowerShell/Plaster

Installation

Install-Module Forge.Module

Example

The following commands should generate a module named PoshTodo:

New-ForgeModule -Name PoshTodo -License MIT -Author Léa -Email lea@example.com -Layout ModuleName

Would create, in the current directory a scaffold for module PoshTodo with the following structure:

./PoshTodo
├── LICENSE
├── PoshTodo
│   ├── PoshTodo.psd1
│   └── PoshTodo.psm1
├── README.md
└── Tests

A skeleton function with associated Pester test file can then be generated by executing:

cd PoshTodo
New-ForgeModuleFunction -Name New-PoshTodo

Which produces the following result:

./PoshTodo
├── LICENSE
├── PoshTodo
│   ├── New-PoshTodo.ps1
│   ├── PoshTodo.psd1
│   └── PoshTodo.psm1
├── README.md
└── Tests
    ├── Manifest.Tests.ps1
    └── New-PoshTodo.Tests.ps1

Adding the -Editor VSCode parameter will generate workspace configuration files for the Visual Studio Code editor. For instance, it will generate a list of task that allow to run tests and other lifecycle operations from inside the editor.

Depending on your preferences the module can be generated with two different build systems (or none if you do not need or want one).

To generate PSake integration:

New-ForgeModule -Name PoshTodo -Build PSake 

To generate InvokeBuild integration:

New-ForgeModule -Name PoshTodo -Build InvokeBuild

With all options activated we get:

New-ForgeModule -Name PoshTodo -License MIT -Author Léa -Email lea@example.com `
    -Editor VSCode -Build PSake `
    -Description "A Powershell TODO list handler" `
    -Layout ModuleName

Which would generate the following project:

./PoshTodo
├── LICENSE
├── PoshTodo
│   ├── PoshTodo.psd1
│   └── PoshTodo.psm1
├── README.md
├── ScriptAnalyzerSettings.psd1
├── Tests
│   └── Manifest.Tests.ps1
├── build.ps1
├── build.psake.ps1
└── build.settings.ps1    

Dependencies

Run time

At run time, the following modules are required:

Install-Module Forge

Build time

Additionally, at build time, the following modules are required:

Install-Module Pester