functions/Get-DBOConfig.ps1

function Get-DBOConfig {
    <#
    .SYNOPSIS
    Returns a DBOpsConfig object
     
    .DESCRIPTION
    Returns a DBOpsConfig object from an existing json file. If file was not specified, returns a blank DBOpsConfig object.
    Values of the config can be overwritten by the hashtable parameter -Configuration.
     
    .PARAMETER Path
    Path to the JSON config file.
         
    .PARAMETER Configuration
    Overrides for the configuration values. Will replace existing configuration values.
 
    .PARAMETER Confirm
        Prompts to confirm certain actions
 
    .PARAMETER WhatIf
        Shows what would happen if the command would execute, but does not actually perform the command
 
    .EXAMPLE
    # Returns empty configuration
    Get-DBOConfig
     
    .EXAMPLE
    # Returns configuration from existing file
    Get-DBOConfig c:\package\dbops.config.json
 
    .EXAMPLE
    # Saves empty configuration to a file
    (Get-DBOConfig).SaveToFile('c:\package\dbops.config.json')
 
    #>

    [CmdletBinding()]
    param
    (
        [string]$Path,
        [object]$Configuration
    )
    if ($Path) {
        Write-PSFMessage -Level Verbose -Message "Reading configuration from $Path"
        $config = [DBOpsConfig]::FromFile($Path)
    }
    else {
        Write-PSFMessage -Level Verbose -Message "Generating blank configuration object"
        $config = [DBOpsConfig]::new()
    }
    if ($Configuration) {
        if ($Configuration -is [DBOpsConfig] -or $Configuration -is [hashtable]) {
            Write-PSFMessage -Level Verbose -Message "Merging configuration"
            $config.Merge($Configuration)
        }
        else {
            Stop-PSFFunction -EnableException $true -Message "The following object type is not supported: $($InputObject.GetType().Name). The only supported types are DBOpsConfig and Hashtable."
        }
    }
    $config
}