functions/Install-DBOSupportLibrary.ps1

Function Install-DBOSupportLibrary {
    <#
    .SYNOPSIS
    Installs external dependencies for a defined RDBMS
     
    .DESCRIPTION
    This command will download nuget packages from NuGet website in order to support deployments for certain RDBMS.
     
    .PARAMETER Type
    RDBMS Type: Oracle, SQLServer
     
    .PARAMETER Force
    Enforce installation
     
    .PARAMETER Scope
    Choose whether to install for CurrentUser or for AllUsers
     
    .EXAMPLE
    #Installs all dependencies for Oracle
    Install-DBOSupportLibrary Oracle
    .NOTES
     
    #>

    Param (
        [Parameter(Mandatory = $true,
            ValueFromPipeline = $true,
            Position = 1)]
        [Alias('System', 'Database')]
        [ValidateSet('SQLServer', 'Oracle')]
        [string[]]$Type,
        [ValidateSet('CurrentUser', 'AllUsers')]
        [string]$Scope = 'AllUsers',
        [switch]$Force
    )
    begin {
        $nugetAPI = "http://www.nuget.org/api/v2"
        $packageSource = Get-PackageSource -Name nuget.org -ErrorAction SilentlyContinue
        # checking if nuget has an incorrect API url
        if ($packageSource.Location -like 'https://api.nuget.org/v3*') {
            Write-PSFMessage -Level Warning -Message "NuGet package source is registered using API v3, which prevents Install-Package to download nuget packages. Registering a new package source nuget.org.dbops to download packages."
            $packageSource = Register-PackageSource -Name nuget.org.dbops -Location $nugetAPI -ProviderName nuget -Force:$Force -ErrorAction Stop
        }
        if (!$packageSource) {
            Write-PSFMessage -Level Verbose -Message "Registering nuget.org package source $nugetAPI"
            $packageSource = Register-PackageSource -Name nuget.org -Location $nugetAPI -ProviderName nuget -Force:$Force -ErrorAction Stop
        }
    }
    process {
        $dependencies = Get-ExternalLibrary
        foreach ($t in $Type) {
            # Install dependencies
            foreach ($package in $dependencies.$t) {
                Write-PSFMessage -Level Verbose -Message "Installing package $($package.Name)($($package.Version))"
                Install-Package -Source $packageSource.Name -Name $package.Name -MinimumVersion $package.Version -Force:$Force -Scope:$Scope
            }
        }
    }
    end { }
}