title: Download Multiple Files from http using Powershell with proper names
body: <p>I have searched for something similar and I keep running across the FTP download answers. This is helpful information, but ultimately proving to be difficult to translate. I have found a powershell script and it works, but I am wondering if it can be tweaked for my needs. I don't have much experience with powershell scripting, but I'm trying to learn. </p>
  
  <p>The need is this. I need to download and install a series of files to a remote machine, unattended. The files are distributed via email via tinyurls. I currently throw those into a .txt file, then have a powershell script read the list and download each file. </p>
  
  <p>Requirements of the project and why I have turned to powershell (and not other utilities), is that these are very specialized machines. The only tools available are ones that are baked into Windows 7 embedded. </p>
  
  <p>The difficulties I run into are:
  The files download one at the time. I would like to grab as many downloads at the same time that the web server will allow. (usually 6)</p>
  
  <p>The current script creates file names based off the tinyurl. I need the actual file name from the webserver.</p>
  
  <p>Thanks in advance for any suggestions. </p>
  
  <p>Below is the script I’m currently using.</p>
  
  <pre><code>#  Copyright (C) 2011 by David Wright (davidwright@digitalwindfire.com)
  #  All Rights Reserved.
  
  #  Redistribution and use in source and binary forms, with or without
  #  modification or permission, are permitted.
  
  #  Additional information available at http://www.digitalwindfire.com.
  
  $folder = "d:\downloads\"
  $userAgent = "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:7.0.1) Gecko/20100101 Firefox/7.0.1"
  $web = New-Object System.Net.WebClient
  $web.Headers.Add("user-agent", $userAgent)
  
  
  Get-Content "d:\downloads\files.txt" |
      Foreach-Object { 
          "Downloading " + $_
          try {
              $target = join-path $folder ([io.path]::getfilename($_))
              $web.DownloadFile($_, $target)
          } catch {
              $_.Exception.Message
          }
  }
  </code></pre>