Functions/Set-BT_RunbookEnvironment.ps1

<#
.SYNOPSIS
    This function sets up the BitTitan Runbook environment.
#>

function Set-BT_RunbookEnvironment {
    [CmdletBinding(PositionalBinding=$false)]
    param (
        # The BitTitan environment.
        [Parameter(Mandatory=$true)]
        [ValidateSet("BT", "Beta")]
        [String]$environment,

        # Select whether the current environment is on a local machine or on MSPComplete.
        [Parameter(Mandatory=$true)]
        [ValidateNotNull()]
        [Bool]$isRunningOnLocalMachine
    )

    # Set the BT environment
    Write-Verbose "Setting BT Environment to '$($environment)'."
    if (!$Global:PSDefaultParameterValues.ContainsKey("*-BT_*:Environment")) {
        $Global:PSDefaultParameterValues.Add("*-BT_*:Environment", $environment)
    }
    else {
        $Global:PSDefaultParameterValues["*-BT_*:Environment"] = $environment
    }

    # Set the local machine setting
    Write-Verbose "Setting IsRunningOnLocalMachine to '$($isRunningOnLocalMachine)'."
    if (!$Global:PSDefaultParameterValues.ContainsKey("*-BT_*:IsRunningOnLocalMachine")) {
        $Global:PSDefaultParameterValues.Add("*-BT_*:IsRunningOnLocalMachine", $isRunningOnLocalMachine)
    }
    else {
        $Global:PSDefaultParameterValues["*-BT_*:IsRunningOnLocalMachine"] = $isRunningOnLocalMachine
    }

    # Set the PSModulePath if running on the local machine
    if ($isRunningOnLocalMachine) {
        # Retrieve the BtEnvGitHome if available
        if (![String]::IsNullOrWhiteSpace($env:BtEnvGitHome)) {
            $btDir = $env:BtEnvGitHome
        }

        # Check in the current directory
        else {
            $btDir = Get-Location | Split-Path -Parent
        }
        $modulesFolder = "$($btDir)\Runbooks\Modules"
        $betaModulesFolder = "$($btDir)\Runbooks\BetaModules"
        $modulesFolderRegex = $modulesFolder.Replace("\", "\\")
        $betaModulesFolderRegex = $betaModulesFolder.Replace("\", "\\")

        # BT environment
        if ($environment -eq "BT") {
            Write-Verbose "Setting PSModulePath to use '$($modulesFolder)'."
            if ($env:PSModulePath -match ";$($betaModulesFolderRegex)") {
                $env:PSModulePath = $env:PSModulePath -replace ";$($betaModulesFolderRegex)", ""
            }
            if ($env:PSModulePath -notMatch "$($modulesFolderRegex)") {
                $env:PSModulePath += ";$($modulesFolder)"
            }
        }

        # Beta environment
        else {
            Write-Verbose "Setting PSModulePath to use '$($betaModulesFolder)'."
            if ($env:PSModulePath -match ";$($modulesFolderRegex)") {
                $env:PSModulePath = $env:PSModulePath -replace ";$($modulesFolderRegex)", ""
            }
            if ($env:PSModulePath -notMatch "$($betaModulesFolderRegex)") {
                $env:PSModulePath += ";$($betaModulesFolder)"
            }
        }
    }
}