Post

Powershell - web requests for file downloads

How do I download a remote file via an API that also expects an auth Token?

1
2
3
4
5
6
7
8
9
10
11
$DownloadedFile = "C:\tmp\filename.zip";

$Url = "https://path/"
$TOKEN = "supers3crettoken"

$headers = @{
    'Accept' = 'application/octet-stream';
    Authorization = "Bearer $TOKEN";
};

Invoke-WebRequest -UseBasicParsing -Uri $Url -Headers $headers -Outfile $DownloadedFile

Alternative: use .NET WebClient

A faster way is to use the .NET WebClient instead of Invoke-Webrequest for downloading files.

I don’t remember where I read that Invoke-Webrequest copies all of the data into memory before writing it to disk which makes it very slow and resource intensive for downloading files.

There’s a corresponding TIL for downloading files with Webclient.

This post is licensed under CC BY 4.0 by the author.