Public/New-PSModuleInstallScript.ps1

<#
.SYNOPSIS
A function to generate an install script for PowerShell modules.
 
.DESCRIPTION
A function to generate an install script for PowerShell modules. Assuming they
are available to the host and in a PS Repository (NuGet Feed, Fileshare). It can also
be used to generate a template that is modified afterwards to fit other environments.
 
.PARAMETER RepositoryName
Name of the PSRepository that the install script should register during the install process.
 
.PARAMETER RepositoryPath
The network path to the PSRepository that the install script should register during the install process.
 
.PARAMETER Module
The name of the module. Used to generate what module to download.
 
.PARAMETER OutputPath
The output path of the install script. If no parameter is used it will be created in the current directory.
 
.PARAMETER StorageAccountName
Name of the Storage Account. Only used if the Repository is on an Azure Fileshare.
 
.PARAMETER StorageAccountKey
Access key to the Storage Account. Only used if the Repository is on an Azure Fileshare.
 
.Notes
Made as a function in a module by Karl Wallenius, Redeploy AB.
#>

function New-PSModuleInstallScript {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true, Position = 0, ParameterSetName = "Repository")]
        [String]
        $RepositoryName,
        [Parameter(Mandatory = $true, Position = 1, ParameterSetName = "Repository")]
        [String]
        $RepositoryPath,
        [Parameter(Mandatory = $true, Position = 2)]
        [String]
        $Module,
        [Parameter(Mandatory = $false, Position = 3)]
        [String]
        $OutputPath = (Join-Path (Get-Location).Path "install-module.ps1"),
        [Parameter(Mandatory = $false, Position = 4)]
        [String]
        $StorageAccountName,
        [Parameter(Mandatory = $false, Position = 5)]
        [String]
        $StorageAccountKey
    )

    begin {
        # Validate Path given.
        if ($OutputPath.Substring(($OutputPath.Length - 1) - 3) -ne ".ps1") {
            $moduleName = $Module.ToLower()
            $OutputPath = Join-Path $OutputPath.Trim('\') "\install-$moduleName.ps1"
        }

        # Create file and path if it does not exist.
        if (!(Test-Path (Split-Path $OutputPath -Parent))) {
            New-Item -ItemType Directory -Path (Split-Path $OutputPath -Parent)
        }
    }

    process {
        # Import template.
        . "$PSScriptRoot\..\templates\script_template.ps1"

        Write-Verbose "Creating script from template."

        $scriptTemplate | Out-File -FilePath $OutputPath -Encoding utf8
    }
}