Providers/DatabaseProvider.ps1

#
# DatabaseProvider.ps1
#
#region Parameters
[CmdletBinding()]
param
(
    [Parameter(Mandatory = $true, ValueFromPipeline = $true)]
    [string]
    $DatabaseName
);
#endregion


#region FUNCTIONS

FUNCTION Get-Registry 
{
    [CmdletBinding()]
    Param ()

    [PSObject]$RegistryModel = `
    @{ 
        DatabaseName = $DatabaseName; 
    };

    #region Create table if not exist and Get saved registry if any
    $RegistrySetupTemplateFile = "$($PSScriptRoot)\$FolderName\Registry-Setup.sql.template";
    $Query = Get-FormattedTemplate -Model $(ConvertTo-Json $RegistryModel) -Path $RegistrySetupTemplateFile -Silent:$true;
    $TempQuery = [System.IO.File]::ReadAllText("$($PSScriptRoot)\$FolderName\Get-Registry.sql.template");
    $Query = -join($Query, "`n", $TempQuery);
    #endregion

    $Data = Invoke-Sqlcmd `
            -AbortOnError:$false `
            -ErrorAction $ErrorActionPreference `
            -Query $Query `
            -QueryTimeout $SqlQueryTimeout `
            -ServerInstance $SQLServerName `
            -Username $SQLServerUserName `
            -Password $SQLServerPassword ;

    RETURN $Data;
}

FUNCTION Set-Registry 
{
    [CmdletBinding()]
    Param
    (
        [Parameter(Mandatory=$true)]
        [psobject]
        $Model
    )

    Begin
    {
        [PSObject]$RegistryModel = `
        @{ 
            DatabaseName = $DatabaseName; 
        };

        #region Create table if not exist
        $RegistrySetupTemplateFile = "$($PSScriptRoot)\$FolderName\Registry-Setup.sql.template";
        $Query = Get-FormattedTemplate -Model $(ConvertTo-Json $RegistryModel) -Path $RegistrySetupTemplateFile -Silent:$true;
        #endregion

        $SetRegistryTemplateFile = "$($PSScriptRoot)\$FolderName\Set-Registry.sql.template";
        $InsertQuery = Get-FormattedTemplate -Model $(ConvertTo-Json $Model) -Path $SetRegistryTemplateFile -Silent:$true;
        $Query = -join($Query, "`n", $InsertQuery);
    }

    Process
    {
        Try 
        {
            Write-Verbose "Executing the below QUERY...";
            Write-Verbose $Query;

            Invoke-Sqlcmd `
            -ErrorAction: Stop `
            -AbortOnError:$false `
            -Query $Query `
            -QueryTimeout $SqlQueryTimeout `
            -ServerInstance $SQLServerName `
            -Username $SQLServerUserName `
            -Password $SQLServerPassword;
        }
        Catch
        {
            Write-Host "Error: $_.Exception" -ForegroundColor Red;
        }
    }
}
#endregion