Functions/Test-VirtualEnv.ps1

# ===========================================================================
# Test-VirtualEnv.ps1 -----------------------------------------------------
# ===========================================================================

# function ----------------------------------------------------------------
# ---------------------------------------------------------------------------
function Test-VirtualEnv {

    <#
    .SYNOPSIS
        Checks if there exists a specific virtual environment.
 
    .DESCRIPTION
        Checks if there exists a specific virtual environment in the predefined directory.
 
    .PARAMETER Name
 
    .EXAMPLE
        PS C:\> Test-VirtualEnv -Name venv
 
        True
 
        -----------
        Description
        Checks whether the virtual environment 'venv' exists.
 
    .INPUTS
        System.String. Name of virtual environment to be tested.
     
    .OUTPUTS
        Boolean. True if the specified virtual environment exists.
    #>


    [CmdletBinding(PositionalBinding=$True)]

    [OutputType([Boolean])]

    Param(        
        [Parameter(Position=1, ValueFromPipeline=$True, HelpMessage="Name of virtual environment to be tested.")]
        [System.String] $Name
    )

    Process {

        # check whether a virtual environment is specified
        if (!$Name) {
            Write-FormattedError -Message "There is no virtual environment specified." -Module $PSVirtualEnv.Name -Space -Silent:(!$VerbosePreference)
            return $False
        }

        # check whether the test of a python distribution is specified
        if($Name -eq "python") {
            if (Find-Python){
                return $True
            }
        }

        # check if there exists the specified virtual environment in the predefined directory
        if ( -not $(Get-ChildItem $PSVirtualEnv.WorkDir | Where-Object {$_.Name -eq $Name} )) {
            Write-FormattedError -Message "The virtual environment '$Name' does not exist." -Module $PSVirtualEnv.Name -Space -Silent:(!$VerbosePreference)
            return $False
        }

        # get the full path of the specified virtual environment, which is located in the predefined system path and test the resulting path
        if ( -not $(Test-Path $(Get-VirtualEnvActivationScript -Name $Name) )) {
            Write-FormattedError -Message "Unable to find the activation script. The virtual environment '$Name' seems compromized." -Module $PSVirtualEnv.Name -Space -Silent:(!$VerbosePreference)
            return $False
        }

        return $True
    }
}