Public/Initialize-PSBuild.ps1

function Initialize-PSBuild {
    <#
    .SYNOPSIS
        Initializes BuildHelpers to populate build environment variables.
    .DESCRIPTION
        Initializes BuildHelpers to populate build environment variables.
    .PARAMETER BuildEnvironment
        Contains the PowerShellBuild settings (known as $PSBPreference).
    .PARAMETER UseBuildHelpers
        Use BuildHelpers module to populate common environment variables based
        on current build system context.
    .EXAMPLE
        PS> Initialize-PSBuild -UseBuildHelpers

        Populate build system environment variables.
    #>

    [CmdletBinding()]
    param(
        [Parameter(Mandatory)]
        [Hashtable]
        $BuildEnvironment,

        [switch]$UseBuildHelpers
    )

    if (
        $BuildEnvironment.Build.OutDir.StartsWith(
            $env:BHProjectPath,
            [StringComparison]::OrdinalIgnoreCase
        )
    ) {
        $BuildEnvironment.Build.ModuleOutDir = [IO.Path]::Combine(
            $BuildEnvironment.Build.OutDir,
            $env:BHProjectName,
            $BuildEnvironment.General.ModuleVersion
        )
    } else {
        $BuildEnvironment.Build.ModuleOutDir = [IO.Path]::Combine(
            $env:BHProjectPath,
            $BuildEnvironment.Build.OutDir,
            $env:BHProjectName,
            $BuildEnvironment.General.ModuleVersion
        )
    }

    $params = @{
        BuildOutput = $BuildEnvironment.Build.ModuleOutDir
    }
    Set-BuildEnvironment @params -Force

    Write-Host $LocalizedData.BuildSystemDetails -ForegroundColor 'Yellow'
    $psVersion = $PSVersionTable.PSVersion.ToString()
    $buildModuleName = $MyInvocation.MyCommand.Module.Name
    $buildModuleVersion = $MyInvocation.MyCommand.Module.Version
    $LocalizedData.BuildModule -f $buildModuleName, $buildModuleVersion
    $LocalizedData.PowerShellVersion -f $psVersion

    if ($UseBuildHelpers.IsPresent) {
        $nl = [System.Environment]::NewLine

        Write-Host ($LocalizedData.EnvironmentVariables -f $nl) -ForegroundColor 'Yellow'
        (Get-Item ENV:BH*).Foreach({
                '{0,-20}{1}' -f $_.name, $_.value
            })
    }
}