Public/System/Add-ToPath.ps1

function Add-ToPath {
    <#
    .SYNOPSIS
        Adds a path to the user or system PATH environment variable.
 
    .DESCRIPTION
        This function adds a path to the user or system PATH environment variable.
 
    .PARAMETER PathToAdd
        The path to add to the PATH environment variable.
 
    .PARAMETER SystemPath
        If set, modifies the system PATH instead of the user PATH.
 
    .EXAMPLE
        Add-ToPath -PathToAdd "C:\MyCustomTools"
 
        Adds "C:\MyCustomTools" to the user PATH environment variable.
 
    .EXAMPLE
        Add-ToPath -PathToAdd "C:\SystemWideTools" -SystemPath
 
        Adds "C:\SystemWideTools" to the system PATH environment variable.
    .NOTES
        Author: Michiel VH
    #>


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

        [switch]$SystemPath  # If set, modifies system PATH instead of user PATH
    )

    # Normalize path
    $PathToAdd = $PathToAdd -replace '\\$', ''  # Remove trailing backslash
    $CurrentPath = [System.Environment]::GetEnvironmentVariable("Path", "User")

    if ($SystemPath) {
        $CurrentPath = [System.Environment]::GetEnvironmentVariable("Path", "Machine")
    }

    # Check if path is already in PATH
    if ($CurrentPath -split ";" -contains $PathToAdd) {
        Write-Host "Path already exists in PATH variable." -ForegroundColor Yellow
    } else {
        # Append the new path
        $NewPath = "$CurrentPath;$PathToAdd"

        # Persist the change
        if ($SystemPath) {
            [System.Environment]::SetEnvironmentVariable("Path", $NewPath, "Machine")
            Write-Host "Added $PathToAdd to system PATH." -ForegroundColor Green
        } else {
            [System.Environment]::SetEnvironmentVariable("Path", $NewPath, "User")
            Write-Host "Added $PathToAdd to user PATH." -ForegroundColor Green
        }
    }

    # Also update current session PATH
    $env:Path += ";$PathToAdd"
    Write-Host "Updated PATH for the current session."
}

# Usage:
# Add-ToPath -PathToAdd "C:\MyCustomTools"
# Add-ToPath -PathToAdd "C:\SystemWideTools" -SystemPath # To modify system PATH