Private/Add-EnvPath.ps1

function Add-EnvPath {
    <#
    .LINK
    https://gist.github.com/mkropat/c1226e0cc2ca941b23a9
    #>


    [CmdletBinding()]
    param (
        [Parameter(Mandatory=$true)]
        [string] $Path,

        [ValidateSet('Machine', 'User', 'Session')]
        [string] $Container = 'Session'
    )

    process {
        Write-Verbose -Message "Container is set to: $Container"
        if ($Container -ne 'Session') {
            $containerMapping = @{
                Machine = [EnvironmentVariableTarget]::Machine
                User    = [EnvironmentVariableTarget]::User
            }
            $containerType = $containerMapping[$Container]

            $persistedPaths = [Environment]::GetEnvironmentVariable('Path', $containerType) -split ';'
            if ($persistedPaths -notcontains $Path) {
                $persistedPaths = $persistedPaths + $Path | Where-Object { $_ }
                [Environment]::SetEnvironmentVariable('Path', $persistedPaths -join ';', $containerType)
            }
            Write-Verbose -Message "Adding $Path to environment path."
        }

        $envPaths = $env:Path -split ';'
        Write-Verbose -Message "Current environment paths: $envPaths"
        if ($envPaths -notcontains $Path) {
            $envPaths = $envPaths + $Path | Where-Object { $_ }
            $env:Path = $envPaths -join ';'
            Write-Verbose -Message "Adding $Path to environment path."
        }
    } # Process
} # Cmdlet