build/pesterBootstrap.ps1

param(
    [string] $workingDirectory,
    [string] $outputDirectory,
    [string] $tagsToInclude,
    [string] $tagsToExclude,
    [string] $DacPacFilePath,
    [string] $SqlServerConnectionString,
    [string] $PublishOptionsFilePath
)
Import-Module -Name Pester
$pesterVersion = Get-Module -Name Pester
if (!(Test-Path Variable:\pesterVersion)) {Write-Host "Didn't find a pester module installed"} else {Write-Host $pesterVersion.Version}
$pesterMajorVersion = $pesterVersion.Version.Major

if (($pesterVersion.Version.Major -lt 4) -or (!(Test-Path Variable:\pesterMajorVersion))) {
    Write-Host "Pester version is incompatible or missing. Trying to install latest Pester version." 
    if (($PSVersionTable.PSVersion.Major -eq 5 -and $PSVersionTable.PSVersion.Minor -ge 1) -or $PSVersionTable.PSVersion.Major -gt 5) {
        try {
            $pesterVersion.Version
            Install-Module -Name Pester -Force -Scope CurrentUser -SkipPublisherCheck
            Write-Host "Installed Pester module"
            Import-Module -Name Pester -MinimumVersion 4.0.0 -Force
        }
        catch {
            $Message = $_.Exception.Message
            Write-Host "Unable to install Pester, see exception message for additional details."
            Write-Host $Message
            exit -1
        }
    }
    else {
        Write-Host "Powershell Version "$PSVersionTable.PSVersion.Major"."$PSVersionTable.PSVersion.Minor" - please use at least version 5.1 or higher of powershell for us to dynamically install the required Pester version"
    }
}

$Parameters = @{
    PassThru     = $True
    ExcludeTag   = $tagsToExclude
    Tag          = $tagsToInclude
    OutputFile   = "$outputDirectory/TEST-output.xml"
    OutputFormat = 'NUnitXml' 
    Script       = @{Path = "$workingDirectory"; Parameters = @{DacPacFilePath = "$DacPacFilePath"; SqlServerConnectionString = $SqlServerConnectionString; PublishOptionsFilePath = $PublishOptionsFilePath}};
}
$result = Invoke-Pester @Parameters

if ($result.failedCount -ne 0) { 
    Write-Error "Pester returned errors"
    Exit -1
}