CmdLets/Get-AppsDownload.ps1
|
Function Get-AppsDownload { [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 "Download: $($Application.Name)" $Destination = Join-Path $DownloadPath $Application.Name If (!(Test-Path $Destination)) { New-ItemWrapper -Path $Destination } ForEach ($ScriptBlock in $Application.PreScriptBlocks) { Write-Host $ScriptBlock Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope } $ProgressPreference = 'SilentlyContinue' ForEach ($URI in $Application.URIs) { ForEach ($ScriptBlock in $URI.PreScriptBlocks) { Write-Host $ScriptBlock Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope } if ($URI.FileName) { $OutFile = Join-Path $Destination $URI.FileName } else { $OutFile = Join-Path $Destination (Split-Path $URI.URI -Leaf) } If (!(Test-Path $OutFile) -or $Force.IsPresent ) { Write-Host "`tDownloading: $($URI.URI)" Invoke-WebRequest -UseBasicParsing -Uri $URI.URI -OutFile $OutFile } ForEach ($ScriptBlock in $URI.PostScriptBlocks) { Write-Host $ScriptBlock Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope } } ForEach ($ScriptBlock in $Application.PostScriptBlocks) { Write-Host $ScriptBlock Invoke-Command -ScriptBlock ([ScriptBlock]::Create($ScriptBlock)) -NoNewScope } } Write-Progress -ID 0 -Activity "Downloading Applications" -Completed } |