Last weekend I was at the Atlanta Code Camp, giving a presentation on PowerShell for Developers. One of the attendees emailed me, asking for a good example of being able to download multiple files from a website.
To do so, we’ll use the Invoke-WebRequest cmdlet. But first, we’ll setup a directory to hold our output. For all my demos I have a root folder, C:\PowerShell. For this article I’ve created a subfolder called Invoke-WebRequest-Demo. The first thing my code does is sets a variable to point to this folder, then changes the current location to it.
$dir = 'C:\PowerShell\Invoke-WebRequest-Demo'
Next, we’ll need a variable to point to the root URL of the website we wish to download from. This will be everything except for the actual file name. For this demo I will use files from the No Agenda Show podcast. Not only is it a cool podcast, but they have an unrestricted license for their material meaning I can freely reuse it for demo purposes. Each episode of the podcast has it’s own image, so we’ll download images from a few recent episodes.
After I place the base URL into a variable, I create an array, each item in the array having the name of a file to download.
$baseUrl = 'http://adam.curry.com/enc/'
$files = '1537127586.656_na-1069-art-feed.png',
Now that everything is setup, we use a simple foreach loop to iterate over the array and download each file via Invoke-WebRequest.
foreach ($file in $files)
Write-Host "Downloading $file"
$dlUrl = "$($baseUrl)$file"
$dlPath = "$($dir)$file"
Invoke-WebRequest $dlUrl -OutFile $dlPath
And that’s all there is to it. If you want to learn more about downloading files via the web, this code was extracted from my Testing PowerShell with Pester course on Pluralsight. In it I test a module which gets the RSS feed, then downloads images and audio files for the No Agenda show. Just go to the About Me link at the top and you’ll find a complete list of all my Pluralsight courses.
Speaking of Pester, you might also appreciate the introduction to Pester series of articles I’m currently authoring for Red Gate’s Simple Talk website. You can find a link via the same About Me page, or just jump directly there by going to http://arcanecode.red to see my articles.