Download file with progress
Thanks to Jason Niver on MSDN Blogs (Downloading files from the internet in PowerShell (with progress)), yep, we can download a file from the web and display progress (bytes and percentage).
Function Get-Webfile ($url) { $dest=(Join-Path $pwd.Path $url.SubString($url.LastIndexOf('/'))) Write-Host "Downloading $url`n" -ForegroundColor DarkGreen; $uri=New-Object "System.Uri" "$url" $request=[System.Net.HttpWebRequest]::Create($uri) $request.set_Timeout(5000) $response=$request.GetResponse() $totalLength=[System.Math]::Floor($response.get_ContentLength()/1024) $length=$response.get_ContentLength() $responseStream=$response.GetResponseStream() $destStream=New-Object -TypeName System.IO.FileStream -ArgumentList $dest, Create $buffer=New-Object byte[] 10KB $count=$responseStream.Read($buffer,0,$buffer.length) $downloadedBytes=$count while ($count -gt 0) { [System.Console]::CursorLeft=0 [System.Console]::Write("Downloaded {0}K of {1}K ({2}%)", [System.Math]::Floor($downloadedBytes/1024), $totalLength, [System.Math]::Round(($downloadedBytes / $length) * 100,0)) $destStream.Write($buffer, 0, $count) $count=$responseStream.Read($buffer,0,$buffer.length) $downloadedBytes+=$count } Write-Host "" Write-Host "`nDownload of `"$dest`" finished." -ForegroundColor DarkGreen; $destStream.Flush() $destStream.Close() $destStream.Dispose() $responseStream.Dispose() }