CmdLets/Get-AppsEvergreen.ps1

Function Get-AppsEvergreen 
 {

    [CmdletBinding()]
    Param(
        [Parameter(Mandatory=$True)]
            $Applications,
        [Parameter(Mandatory=$True)]
            [System.IO.FileInfo]$DownloadPath,
        [Parameter(Mandatory=$False)]
            [Switch]$Force
    )
    
    ForEach ($Application in $Applications) {
        $i++; Write-Progress -ID 0 -Activity "Downloading Applications" -Status "Downloading: $($Application.Name)" -PercentComplete (($i/$Applications.Count)*100);
        Write-Host "Evergreen: $($Application.Name)"
        ForEach ($ScriptBlock in $Application.PreScriptBlocks) { 
            Write-Host $ScriptBlock
            Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope
        }

        $Destination = Join-Path -Path $DownloadPath -ChildPath $Application.EvergreenApp
        if (!(Test-Path $Destination)) { 
            New-ItemWrapper -Path $Destination 
        }

        $EvergreenApp = Get-EvergreenApp -Name $Application.EverGreenApp
        If ($Application.Filter -ne "") { 
            $Filter = [ScriptBlock]::Create($Application.Filter)
            $EvergreenApp = ($EvergreenApp | Where-Object -FilterScript $Filter)
        }

        $ProgressPreference = 'SilentlyContinue'
        ForEach ($App in $EvergreenApp) {
            $File = Split-Path -Path $App.Uri -Leaf
            $OutFile = Join-Path -Path $Destination -ChildPath ([system.uri]::UnescapeDataString($File))
            if (!(Test-Path $OutFile) -or $Force.IsPresent) {
                Write-Host "`tDownloading: $($App.URI)"
                Invoke-WebRequest -UseBasicParsing -Uri $App.uri -OutFile $OutFile
            }
        }

        ForEach ($ScriptBlock in $Application.PostScriptBlocks) { 
            Write-Host $ScriptBlock
            Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope
        }
    }
    Write-Progress -ID 0 -Activity "Downloading Applications" -Completed

}