Data/Example-ModuleBuilder.txt

Build-Module -ModuleName '$ModuleName' {
    # Usual defaults as per standard module
    $Manifest = [ordered] @{
        ModuleVersion = '1.0.0'
        CompatiblePSEditions = @('Desktop', 'Core')
        GUID = '$Guid'
        Author = 'Author'
        CompanyName = 'CompanyName'
        Copyright = "(c) 2011 - $((Get-Date).Year) Author @ CompanyName. All rights reserved."
        Description = 'Simple project $ModuleName'
        PowerShellVersion = '5.1'
        Tags = @('Windows', 'MacOS', 'Linux')
    }
    New-ConfigurationManifest @Manifest
 
    # Add standard module dependencies (directly, but can be used with loop as well)
    #New-ConfigurationModule -Type RequiredModule -Name 'PSSharedGoods' -Guid 'Auto' -Version 'Latest'
 
    # Add external module dependencies, using loop for simplicity
    #foreach ($Module in @('Microsoft.PowerShell.Utility', 'Microsoft.PowerShell.Archive', 'Microsoft.PowerShell.Management', 'Microsoft.PowerShell.Security')) {
    # New-ConfigurationModule -Type ExternalModule -Name $Module
    #}
 
    # Add approved modules, that can be used as a dependency, but only when specific function from those modules is used
    # And on that time only that function and dependant functions will be copied over
    # Keep in mind it has it's limits when "copying" functions such as it should not depend on DLLs or other external files
    #New-ConfigurationModule -Type ApprovedModule -Name 'PSSharedGoods', 'PSWriteColor', 'Connectimo', 'PSUnifi', 'PSWebToolbox', 'PSMyPassword'
 
    #New-ConfigurationModuleSkip -IgnoreFunctionName 'Invoke-Formatter', 'Find-Module' -IgnoreModuleName 'platyPS'
 
    $ConfigurationFormat = [ordered] @{
        RemoveComments = $false
 
        PlaceOpenBraceEnable = $true
        PlaceOpenBraceOnSameLine = $true
        PlaceOpenBraceNewLineAfter = $true
        PlaceOpenBraceIgnoreOneLineBlock = $false
 
        PlaceCloseBraceEnable = $true
        PlaceCloseBraceNewLineAfter = $true
        PlaceCloseBraceIgnoreOneLineBlock = $false
        PlaceCloseBraceNoEmptyLineBefore = $true
 
        UseConsistentIndentationEnable = $true
        UseConsistentIndentationKind = 'space'
        UseConsistentIndentationPipelineIndentation = 'IncreaseIndentationAfterEveryPipeline'
        UseConsistentIndentationIndentationSize = 4
 
        UseConsistentWhitespaceEnable = $true
        UseConsistentWhitespaceCheckInnerBrace = $true
        UseConsistentWhitespaceCheckOpenBrace = $true
        UseConsistentWhitespaceCheckOpenParen = $true
        UseConsistentWhitespaceCheckOperator = $true
        UseConsistentWhitespaceCheckPipe = $true
        UseConsistentWhitespaceCheckSeparator = $true
 
        AlignAssignmentStatementEnable = $true
        AlignAssignmentStatementCheckHashtable = $true
 
        UseCorrectCasingEnable = $true
    }
    # format PSD1 and PSM1 files when merging into a single file
    # enable formatting is not required as Configuration is provided
    New-ConfigurationFormat -ApplyTo 'OnMergePSM1', 'OnMergePSD1' -Sort None @ConfigurationFormat
    # format PSD1 and PSM1 files within the module
    # enable formatting is required to make sure that formatting is applied (with default settings)
    New-ConfigurationFormat -ApplyTo 'DefaultPSD1', 'DefaultPSM1' -EnableFormatting -Sort None
    # when creating PSD1 use special style without comments and with only required parameters
    New-ConfigurationFormat -ApplyTo 'DefaultPSD1', 'OnMergePSD1' -PSD1Style 'Minimal'
 
    # configuration for documentation, at the same time it enables documentation processing
    New-ConfigurationDocumentation -Enable:$false -StartClean -UpdateWhenNew -PathReadme 'Docs\Readme.md' -Path 'Docs'
 
    New-ConfigurationImportModule -ImportSelf -ImportRequiredModules
 
    New-ConfigurationBuild -Enable:$true -SignModule:$false -DeleteTargetModuleBeforeBuild -MergeModuleOnBuild -MergeFunctionsFromApprovedModules -DoNotAttemptToFixRelativePaths
 
    #New-ConfigurationArtefact -Type Unpacked -Enable -Path "$PSScriptRoot\..\Artefacts\Unpacked" #-RequiredModulesPath "$PSScriptRoot\..\Artefacts\Modules"
    #New-ConfigurationArtefact -Type Packed -Enable -Path "$PSScriptRoot\..\Artefacts\Packed" -IncludeTagName
 
    # global options for publishing to github/psgallery
    #New-ConfigurationPublish -Type PowerShellGallery -FilePath 'C:\Support\Important\PowerShellGalleryAPI.txt' -Enabled:$false
    #New-ConfigurationPublish -Type GitHub -FilePath 'C:\Support\Important\GitHubAPI.txt' -UserName 'CompanyName' -Enabled:$false
}