internal/functions/Resolve-VariableToken.ps1

Function Resolve-VariableToken {
    <#
    .SYNOPSIS
    Replaces all the tokens in a string with provided variables
 
    .DESCRIPTION
    Parses input string and replaces all the #{tokens} inside it with provided variables
 
    .PARAMETER InputString
    String to parse
 
    .PARAMETER Runtime
    Variables collection. Token names should match keys in the hashtable
 
    .EXAMPLE
    Resolve-VariableToken -InputString "SELECT '#{foo}' as str" -Runtime @{ foo = 'bar'}
    #>

    [CmdletBinding()]
    Param (
        [object[]]$InputObject,
        [object]$Runtime,
        [string]$TokenRegex = (Get-DBODefaultSetting -Name config.variabletoken -Value)
    )
    foreach ($obj in $InputObject) {
        if ($obj -is [string]) {
            $output = $obj
            foreach ($token in (Get-VariableToken -InputString $obj -RegexString $TokenRegex.Replace('token', '[a-zA-Z0-9_\-.]+'))) {
                #Replace variables found in the config
                $tokenRegExString = $TokenRegex.Replace('token', [Regex]::Escape($token))
                if ($Runtime) {
                    if ($Runtime -is [hashtable]) { $variableList = $Runtime.Keys }
                    else { $variableList = $Runtime.psobject.Properties.Name }
                    if ($variableList -contains $token) {
                        Write-PSFMessage -Level Debug -Message "Replacing token $token"
                        $output = $output -replace $tokenRegExString, $Runtime.$token
                    }
                }
            }
            $output
        }
        else {
            $obj
        }
    }
}