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 } |