Public/Enable-Virtualenv.ps1

Function Enable-Virtualenv {
    <#
    .SYNOPSIS
        To enable Virtualenv on your PowerShell console
    .PARAMETER Path
        Specifies the absolute path of your Virtualenv
    .EXAMPLE
        Enable-Virtualenv
        Enable-Virtualenv -Path 'c:\project\env'
    .NOTES
        Version: 1.0.0
        Author: Thomas ILLIET
        Creation Date: 22/07/2018
    #>

    [CmdletBinding(DefaultParameterSetName='ByName')]
    Param(
        [Parameter(Mandatory = $False, ParameterSetName = 'ByName')]
        [string]$Name,

        [Parameter(Mandatory = $False, ParameterSetName = 'ByPath')]
        [string]$Path
    )

    Try {
        # Define Virtualenv Path
        switch ($PsCmdlet.ParameterSetName){
            "ByName" {
                if([string]::IsNullOrEmpty($Name)){
                    $VirtualenvPath  = Join-Path -Path (get-location) -ChildPath 'venv'
                } else {
                    $VirtualenvPath  = Join-Path -Path (get-location) -ChildPath $Name
                }
            }
            "ByPath" {
                $VirtualenvPath  = $Path
            }
        }
        # Determine if the directory exists
        if(Test-Path -Path $VirtualenvPath) {
            # Get Folder Object
            $FolderObject = Get-Item -Path $VirtualenvPath

            # Set Variable to unlock function
            New-Variable -Scope 'Script' -Name 'VirtualenvFolder' -Value $FolderObject.FullName -Force
            New-Variable -Scope 'Script' -Name 'VirtualenvName' -Value $FolderObject.BaseName -Force

            # Overide Prompt
            Set-Item Function:\prompt -Value Set-Prompt
        } else {
            Write-Error "Unable to find Virtualenv directory"
        }
    } Catch {
        Write-Error "Unable to enable Virtualenv : $($_.Exception.Message)"
    }
}