SystemPath.psm1

#region Get-SystemPath
Function Get-SystemPath
{
    Param
    (
        [switch]$AsString,
        [switch]$Active
    )

    # Get current PATH
    $CurrentPath=(Get-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PATH).Path

    if($AsString)
    {
        if( $Active )
        {
            return $env:Path
        }
        else
        {
        return $CurrentPath
        }
    }
    else
    {
        $directories = @()
        if($Active)
        {
            $directories = $env:Path.Split(';')
        }
        else
        {
            $directories = $currentpath.Split(';')
        }

        foreach($d in $directories)
        {
            $obj = New-Object psobject
            $obj | Add-Member -MemberType NoteProperty -Name Path -Value $d

            $obj
        }
    }
}
#endregion

#region Add-SystemPath
Function Add-SystemPath
{
    Param
    (
        [parameter(
            Mandatory=$True,
            ValueFromPipeline=$True,
            Position=0
        )]
        [String[]]$Path
    )

    # Get the current PATH
    $CurrentPath= Get-SystemPath -AsString
    $NewPath = $CurrentPath

    foreach($p in $Path)
    {
        # Test if folder to be added to the PATH exists
        If( !(Test-Path $p))
        {
            Write-Error ("Folder " + $p + " does not exist!")
            continue
        }

        # Test if the folder already exists in the PATH
        $currentPathDirectories = Get-SystemPath
        $found = 0
        foreach($d in $currentPathDirectories)
        {
            if( $d -eq $p )
            {
                Write-Warning ("Folder " + $p + " already exists in PATH")
                $fount = 1
                continue
            }
        }

        if( $found -eq 1)
        {
            continue
        }

        # Form the New Path
        $NewPath = $NewPath + ’;’ +$p
    }

    # Set the new path
    Set-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PATH –Value $newPath
}
#endregion

#region Remove-SystemPath
function Remove-SystemPath
{
    Param
    (
        [parameter(
            Mandatory=$True,
            ValueFromPipeline=$True,
            Position=0
        )]
        [String[]]$Path
    )

    # Get the current PATH
    $CurrentPath=Get-SystemPath -AsString
    $newpath = ""

    foreach($p in $Path)
    {
        # Test if the folder exists in the PATH
        $currentPathDirectories = Get-SystemPath
        $found = 0
        foreach($d in $currentPathDirectories)
        {
            if( $d.Path -eq $p )
            {
                $found = 1
                break
            }
        }
        if($found -eq 0)
        {
            Write-Error ("Folder " + $p + " does not exist in PATH")
            continue
        }
    }

    # Form the New Path
    foreach($d in $currentPathDirectories)
    {
        if(!$Path.Contains($d.path))
        {
            $newpath += $d.path + ";"
        }

    }    

    # Remove the last ";"
    $newPath = $newPath.Remove($newPath.Length - 1)

    # Set the new path
    Set-ItemProperty -Path ‘Registry::HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\Session Manager\Environment’ -Name PATH –Value $newPath
}
#endregion

#region Exports
Export-ModuleMember -Function Get-SystemPath
Export-ModuleMember -Function Add-SystemPath
Export-ModuleMember -Function Remove-SystemPath
#endregion