Public/New-specModule.ps1

Function New-specModule {
    <#
    .SYNOPSIS
        Automates the creation of a basic PowerShell module structure, including necessary files and configuration for Pester testing and PowerShell Gallery publishing.
 
    .DESCRIPTION
        This function streamlines the setup of a new PowerShell module by creating the following:
            * A root folder with standard subfolders ('Tests', module folder, 'en-US', 'Public', 'Private').
            * A README.md file.
            * A Test.ps1 file with basic Pester configuration.
            * A Pester tests file (.tests.ps1).
            * An 'about_' help file.
            * A module manifest (.psd1) file.
            * A module loader (.psm1) file.
            * YAML configuration files for Pester testing and PowerShell Gallery publishing pipelines.
 
    .PARAMETER path
        Required. The base path where the module structure will be created.
 
    .PARAMETER Name
        Required. The name of the new module.
 
    .PARAMETER ShortDescription
        Required. A concise description of the module's functionality.
 
    .PARAMETER DevOpsPath
        Required. The relative path to the module folder within your DevOps repository.
 
    .EXAMPLE
        New-specModule -path C:\Dev\Modules -Name MyModule -ShortDescription "Provides data processing tools" -RelativePath "Modules"
 
    .NOTES
        Author: owen.heaume
        Version: 1.0.0 - Initial release
                    1.0.1 - Change 'DevopsPath' to 'RelativePath'
    #>


    [cmdletbinding()]

    param(
        [parameter (Mandatory)]
        [string]$path,

        [parameter (Mandatory)]
        [string]$Name,

        [parameter (Mandatory)]
        [string]$ShortDescription,

        [Parameter(Mandatory)]
        [string]$RelativePath
    )

    Begin {}

    Process {
        # 1. Create the folder structure
        $paths = New-FolderStructure -Path $Path -Name $Name
        Write-Host ''

        # 2. Create the Pester YAML file
        New-PesterYamlFile -Path $Path -Name $Name -DevOpsPath $RelativePath
        Write-Host ''

        # 3. Create the PSGallery YAML file
        New-PSGalleryYamlFile -Path $Path -Name $Name -DevOpsPath $RelativePath
        Write-Host ''

        # 4. create the README.md file
        New-ReadMe -Path $paths.folderPath -Name $name
        Write-Host ''

        # 5. Create the Test.ps1 file
        New-TestFile -Path $paths.folderpath -Name $name
        Write-Host ''

        # 6. Create the Pester tests file
        New-PesterTestsFile -Path $paths.tests -Name $Name
        Write-Host ''

        # 7. Create the about file
        New-AboutFile -Path $paths.enus -Name $name -moduleShortDescription $ShortDescription
        Write-Host ''

        # 8. Create the module manifest psd1 file
        New-Psd1File -path $paths.module -name $name -moduleShortDescription $ShortDescription
        Write-Host ''

        #9. Create the module psm1 file
        New-Psm1File -path $paths.module -name $Name
        Write-Host ''
    }

    End {
        Write-Host "Module '$name' has been setup successfully" -ForegroundColor DarkGreen
    }
}