Private/SqlPipeline/Install-NuGetPackage.ps1

function Install-NuGetPackage {
    [CmdletBinding()]
    param(
        [Parameter(Mandatory = $true)]
        [string]$PackageId,

        [Parameter(Mandatory = $false)]
        [string]$Version = "",

        [Parameter(Mandatory = $false)]
        [string]$OutputDir = "./lib",

        [Parameter(Mandatory = $false)]
        [switch]$KeepPackage = $false
    )

    # Resolve latest version if not specified
    if (-not $Version) {
        $indexUrl = "https://api.nuget.org/v3-flatcontainer/$($PackageId.ToLower())/index.json"
        $index = Invoke-RestMethod -Uri $indexUrl
        $Version = $index.versions[-1]
    }

    $pkgId    = $PackageId.ToLower()
    $url      = "https://api.nuget.org/v3-flatcontainer/$pkgId/$Version/$pkgId.$Version.nupkg"
    $outFile  = Join-Path $OutputDir "$pkgId.$Version.nupkg"
    $unzipDir = Join-Path $OutputDir "$pkgId.$Version"

    Write-Verbose "Downloading $PackageId $Version ..."
    Invoke-WebRequest -Uri $url -OutFile $outFile

    Write-Verbose "Extracting to $unzipDir ..."
    Expand-Archive -Path $outFile -DestinationPath $unzipDir -Force

    if (-not $KeepPackage) {
        Write-Verbose "Removing $outFile ..."
        Remove-Item -Path $outFile -Force
    }

    Write-Verbose "Done: $unzipDir"
    return $unzipDir

}