VaporShell.psm1

Param
(
  [parameter(Position=0)]
  $ForceDotSource = $false
)
#Get public and private function definition files.
$Public = @( Get-ChildItem -Path $PSScriptRoot\Public -Recurse -Filter "*.ps1" -ErrorAction SilentlyContinue )
$Private = @( Get-ChildItem -Path $PSScriptRoot\Private -Recurse -Filter "*.ps1" -ErrorAction SilentlyContinue )
$VaporshellPath = $PSScriptRoot

#Execute a scriptblock to load each function instead of dot sourcing (Issue #5)
foreach ($file in @($Public + $Private)) {
    if ($ForceDotSource) {
        . $file.FullName
    }
    else {
        $ExecutionContext.InvokeCommand.InvokeScript(
            $false, 
            (
                [scriptblock]::Create(
                    [io.file]::ReadAllText(
                        $file.FullName,
                        [Text.Encoding]::UTF8
                    )
                )
            ), 
            $null, 
            $null
        )
    }
}

# Load AWS .NET SDK if not already loaded
if (!([AppDomain]::CurrentDomain.GetAssemblies() | Where-Object {$_.Location -like "*AWSSDK.CloudFormation.dll"})) {
    if ($IsCoreCLR) {
        Write-Verbose "Loading AWS SDK for *NetCore*!"
        $sdkPath = (Join-Path $Script:VaporshellPath "bin\NetCore" -Resolve)
    }
    else {
        Write-Verbose "Loading AWS SDK for *Net45*!"
        $sdkPath = (Join-Path $Script:VaporshellPath "bin\Net45" -Resolve)
    }
    Get-ChildItem $sdkPath -Filter "*.dll" | ForEach-Object {
        [reflection.assembly]::LoadFrom("$($_.FullName)") | Out-Null
    }
}

# Add Intrinsic and Condition Function short aliases
$aliases = @()
Get-ChildItem "$PSScriptRoot\Public\Intrinsic Functions" | ForEach-Object {
    $aliases += ($_.BaseName).Replace('Add-','')
    New-Alias -Name ($_.BaseName).Replace('Add-','') -Value $_.BaseName -Force
}
Get-ChildItem "$PSScriptRoot\Public\Condition Functions" | ForEach-Object {
    $aliases += ($_.BaseName).Replace('Add-','')
    New-Alias -Name ($_.BaseName).Replace('Add-','') -Value $_.BaseName -Force
}

# Add in Pseudo Parameter variables from private text file (allows growth in case additional parameters need to be added in)
$vars = @()
Get-Content -Path "$PSScriptRoot\Private\PseudoParams.txt" | ForEach-Object {
    $name = "_$(($_ -replace "::").Trim())"
    New-Variable -Name $name -Value "$(($_).Trim())"
    $vars += $name
}

$DSLModulePath = (Resolve-Path "$PSScriptRoot\DSL\VaporShell.DSL.psm1").Path
Import-Module $DSLModulePath -DisableNameChecking -Force -Verbose:$false

Export-ModuleMember -Function ($Public.Basename + (Get-Command -Module VaporShell.DSL).Name) -Variable $vars -Alias $aliases -Verbose:$false