CmdLets/Initialize-Variables.ps1

Function Initialize-Variables 
 {

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)]$Variables
    )
    ForEach ($Variable in $Variables) {
        Write-Host "Processing Variable: $($Variable.Name)"
        ForEach ($ScriptBlock in $Variable.PreScriptBlocks) { 
            Write-Host $ScriptBlock
            Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope
        }
        $Variable.Value = Convert-PlaceholderVariables -Value $Variable.Value -Variables $Variables
        if (Get-Variable -Name $Variable.Name -ErrorAction SilentlyContinue) {
            Write-Host "`tSetting Value: $($Variable.Value)"
            Set-Variable -Name $Variable.Name -Value $Variable.Value -Scope Global
        } else {
            Write-Host "`tCreating Value: $($Variable.Value)"
            New-Variable -Name $Variable.Name -Value $Variable.Value -Scope Global
        }
        ForEach ($ScriptBlock in $Variable.PostScriptBlocks) { 
            Write-Host $ScriptBlock
            Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope
        }
    }

}