Het downloaden van bestanden met PowerShell kan soms wat problematisch zijn. In dit artikel geef ik je een klein PowerShell-scriptje dat je op je PS-shell kunt gebruiken om eenvoudig en snel bestanden te downloaden.

We zijn gewend om, als we bestanden downloaden, even snel een browser erbij te pakken. Bijvoorbeeld Chrome of Firefox. Maar op een server is er vaak geen browser, en als de server is voorzien van een Windows Server Core versie, is er helemaal geen browser beschikbaar. En dan? PowerShell!

PowerShell script om bestanden te downloaden

Je kunt het volgende scriptje gebruiken voor het downloaden van bestanden. Het heeft twee parameters nodig: de bron (de URL / het bestand om te downloaden) en de locatie inclusief bestandsnaam.

Sla de code op als bijvoorbeeld downloadfile.ps1.

param (
[Parameter(Mandatory = $true, Position = 0, HelpMessage="Volledige downloadlink")]
[string]$url,
[Parameter(Mandatory = $true, Position = 1, HelpMessage="Met wildcard zoeken?")]
[string]$output
)
$start_time = Get-Date

(New-Object System.Net.WebClient).DownloadFile($url, $output)
Write-Output "Saved ${output}, took: $((Get-Date).Subtract($start_time).Seconds) second(s)"

Je merkt waarschijnlijk al op dat hier System.Net.WebClient, of te wel ASP.NET, wordt gebruikt, en niet PowerShell’s Invoke-WebRequest. Dat komt omdat System.Net.WebClient véél sneller is. Een nadeel van System.Net.WebClient gebruiken is dat er geen progress-indicator is. Je ziet niet hoe lang het downloaden nog duurt.

Laten we PowerShell 7.0.1 downloaden als voorbeeld:

PS C:\Users\janreilink> .\downloadfile.ps1

cmdlet downloadfile.ps1 at command pipeline position 1
Supply values for the following parameters:
(Type !? for Help.)
url: https://github.com/PowerShell/PowerShell/releases/download/v7.0.1/PowerShell-7.0.1-win-x64.msi
output: Documents\PowerShell-7.0.1-win-x64.msi
Saved Documents\PowerShell-7.0.1-win-x64.msi, took: 18 second(s)

En het resultaat is een bestand van ~ 87 MB, gedownload in 18 seconden:

Protip: uiteraard kun je het script met argumenten ook in één keer opgeven:

PS C:\Users\janreilink> .\downloadfile.ps1 -url https://github.com/PowerShell/PowerShell/releases/download/v7.0.1/PowerShell-7.0.1-win-x64.msi -output .\Documents\PowerShell-7.0.1-win-x64.msi

Waarom was dit 11 seconden sneller? Simpel: ik hoefde de gegevens niet te kopiëren plakken tijdens de uitvoer.

Doe er je voordeel mee :)

De bron van dit script is te vinden in het artikel 3 ways to download files with PowerShell van Jourdan Templeton. Ik gebruik dit vrijwel dagelijks voor het downloaden van programma’s en hun updates. Handig!

Leave a Comment

Comments

No comments yet. Why don’t you start the discussion?

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *