Functions/Private/Test-ShouldGetVersion.ps1


function Test-ShouldGetVersion() {
    [CmdletBinding()]
    [OutputType([Boolean])]
    param($modules
         ,[string]$RequiredVersion
         ,[version]$MaximumVersion
         ,[version]$MinimumVersion)

    if ($RequiredVersion -ne "" ){
        write-Verbose "Required version"
        $versionparts = split-version $requiredVersion
        if ($null -eq $versionparts.prerelease){
            if ( -not ($modules.Version -eq $RequiredVersion)) {
                write-Verbose "Required version not found so have to install"
                return $true
            }
        }    
        else {
            
            if (($modules | where-object {$_.Version -eq $versionparts.version -and $_.privateData.psdata.prerelease -eq $versionparts.prerelease}).Count -eq 0){
                write-Verbose "Required version ($version) for prerelease ($prerelease) not found so have to install"
                return $true
            }
        }
    }
    if ($null -ne $MinimumVersion -and -not ($modules.Version -ge $MinimumVersion)) {
        write-Verbose "Minimum version not found so have to install"
        return $true
    }
    if ($null -ne $MaximumVersion -and -not ($modules.Version -le $MaximumVersion)) {
        write-Verbose "Maximum version modules found so have to install"
        return $true
    }
    if (($null -ne $MinimumVersion) -and ($null -ne $MaximumVersion) ) {
        Write-Verbose "Min and Max"
        if (-not ($modules | Where-Object { $_.Version -ge $MinimumVersion -and $_.Version -le $MaximumVersion })) {
            write-Verbose "Minimum and Maximum version modules found so have to install"
            return $true
        }
    }
    if ($null -eq $modules ) {
        write-Verbose "No modules found so have to install"
        return $true
    }
    write-Verbose "All tests passed don't install - modules installed are $($modules.Version)"
    return $false;

}