Public/New-PSModule.ps1

<#
.SYNOPSIS
Scaffolds new module structure.
 
.DESCRIPTION
Function to initialize and scaffolc the structure for a PowerShell script/function module.
 
.PARAMETER Name
The name of the module.
 
.PARAMETER Path
Path to where the module should be created.
 
.PARAMETER Author
Name of the author.
 
.PARAMETER Description
Description of the module.
 
.NOTES
This scaffolding script is inspired by Rambling Cookie Monster,
http://ramblingcookiemonster.github.io/Building-A-PowerShell-Module/
 
For yet more advanced features, modify the resulting module manifest manually.
 
Made as a function in a module by Karl Wallenius, Redeploy AB.
#>

function New-PSModule {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $True, Position = 0)]
        [string]
        $Name,
        [Parameter(Mandatory = $False, Position = 1)]
        [string]
        $Path,
        [Parameter(Mandatory = $True, Position = 2)]
        [string]
        $Author,
        [Parameter(Mandatory = $False, Position = 3)]
        [string]
        $Description,
        [Parameter(Mandatory = $False)]
        [switch]
        $BuildPipeline
    )

    begin {
        # Import templates from variables.
        . "$PSScriptRoot\..\templates\t_module.ps1"
        . "$PSScriptRoot\..\templates\t_help.ps1"
        . "$PSScriptRoot\..\templates\t_readme.ps1"

        # Handle the path of the module.
        if ([string]::IsNullOrEmpty($Path)) {
            $Path = (Get-Location).Path
        } elseif ($Path -eq ".") {
            $Path = (Resolve-Path ".").Path
        } else {
            $Path = $Path.Trim("\")
        }
    }
    #>
    process {
        # Create directories for the project
        Write-Verbose "Creating directory structure."

        New-Item -ItemType Directory -Path "$Path\$Name\$Name" | Out-Null
        New-Item -ItemType Directory -Path "$Path\$Name\$Name\Private" | Out-Null
        New-Item -ItemType Directory -Path "$Path\$Name\$Name\Public" | Out-Null
        New-Item -ItemType Directory -Path "$Path\$Name\$Name\en-US" | Out-Null
        New-Item -ItemType Directory -Path "$Path\$Name\Tests" | Out-Null
        New-Item -ItemType Directory -Path "$Path\$Name\Tests\Private" | Out-Null
        New-Item -ItemType Directory -Path "$Path\$Name\Tests\Public" | Out-Null

        Write-Verbose "Creating module project files."
        
        New-Item "$Path\$Name\$Name\$Name.psm1" -ItemType File | Out-Null
        New-Item "$Path\$Name\$Name\en-US\about_$Name.help.txt" -ItemType File | Out-Null
        #New-Item "$Path\$Name\README.md" -ItemType File | Out-Null
        

        $moduleParams = @{
            Path = "$Path\$Name\$Name\$Name.psd1"
            RootModule = "$Name.psm1"
            Description = $Description
            PowerShellVersion = "3.0"
            Author = $Author
        }

        New-ModuleManifest @moduleParams

        Write-Verbose "Creating module script file."
        $ModuleFileContent | Out-File "$Path\$Name\$Name\$Name.psm1" -Encoding utf8

        Write-Verbose "Creating help file."
        $HelpFileContent -replace "<module>", "$Name" | Out-File "$Path\$Name\$Name\en-US\about_$Name.help.txt" -Encoding utf8

        Write-Verbose "Creating README.md file."
        $ReadmeContent -replace "<module>", "$Name" | Out-File "$Path\$Name\README.md" -Encoding utf8 

        if ($BuildPipeline) {
            
            New-PSBuildPipeline -Module "$Path\$Name"
        }
    }
}