Native alternative to wget in Windows PowerShell?











up vote
257
down vote

favorite
89












I know I can download and install the aformentioned library (wget for Windows), but my question is this:



In Windows PowerShell, is there a native alternative to wget?



I need wget simply to retrieve a file from a given URL with HTTP GET. For instance:



wget http://www.google.com/









share|improve this question
























  • See also superuser.com/questions/25538/…
    – jiggunjer
    May 16 '15 at 19:05

















up vote
257
down vote

favorite
89












I know I can download and install the aformentioned library (wget for Windows), but my question is this:



In Windows PowerShell, is there a native alternative to wget?



I need wget simply to retrieve a file from a given URL with HTTP GET. For instance:



wget http://www.google.com/









share|improve this question
























  • See also superuser.com/questions/25538/…
    – jiggunjer
    May 16 '15 at 19:05















up vote
257
down vote

favorite
89









up vote
257
down vote

favorite
89






89





I know I can download and install the aformentioned library (wget for Windows), but my question is this:



In Windows PowerShell, is there a native alternative to wget?



I need wget simply to retrieve a file from a given URL with HTTP GET. For instance:



wget http://www.google.com/









share|improve this question















I know I can download and install the aformentioned library (wget for Windows), but my question is this:



In Windows PowerShell, is there a native alternative to wget?



I need wget simply to retrieve a file from a given URL with HTTP GET. For instance:



wget http://www.google.com/






windows powershell powershell-2.0 powershell-3.0 powershell-4.0






share|improve this question















share|improve this question













share|improve this question




share|improve this question








edited May 25 '14 at 11:12









eyecatchUp

16517




16517










asked Nov 28 '11 at 9:56









jsalonen

3,470113039




3,470113039












  • See also superuser.com/questions/25538/…
    – jiggunjer
    May 16 '15 at 19:05




















  • See also superuser.com/questions/25538/…
    – jiggunjer
    May 16 '15 at 19:05


















See also superuser.com/questions/25538/…
– jiggunjer
May 16 '15 at 19:05






See also superuser.com/questions/25538/…
– jiggunjer
May 16 '15 at 19:05












9 Answers
9






active

oldest

votes

















up vote
211
down vote



accepted










Here's a simple PS 3.0 and later one-liner that works and doesn't involve much PS barf:



wget http://blog.stackexchange.com/ -OutFile out.html


Note that:





  • wget is an alias for Invoke-WebRequest

  • Invoke-WebRequest returns a HtmlWebResponseObject, which contains a lot of useful HTML parsing properties such as Links, Images, Forms, InputFields, etc., but in this case we're just using the raw Content

  • The file contents are stored in memory before writing to disk, making this approach unsuitable for downloading large files


  • On Windows Server Core installations, you'll need to write this as



    wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html



  • Prior to Sep 20 2014, I suggested



    (wget http://blog.stackexchange.com/).Content >out.html


    as an answer.  However, this doesn't work in all cases, as the > operator (which is an alias for Out-File) converts the input to Unicode.




If you are using Windows 7, you will need to install version 4 or newer of the Windows Management Framework.



You may find that doing a $ProgressPreference = "silentlyContinue" before Invoke-WebRequest will significantly improve download speed with large files; this variable controls whether the progress UI is rendered.






share|improve this answer



















  • 3




    This is now the correct answer, and I ran into wget accidentally testing if I had the actual wget installed. Annoying that it can't get the filename easily (you have to specify it in the output redirection), but this option has a better UI than the real wget (in my opinion) so there's that.
    – Matthew Scharley
    Jan 14 '14 at 0:52








  • 13




    But Windows 7 only comes with PowerShell 2.0, and the result will be "The term 'Invoke-WebRequest' is not recognized as the name of a cmdlet, ...".
    – Peter Mortensen
    Jun 6 '14 at 17:51








  • 14




    Fair warning: This method will put the entire content of the file into memory before writing it out to the file. This is not a good solution for downloading large files.
    – im_nullable
    Jul 13 '14 at 6:35






  • 1




    @im_nullable, good call -- I've added that to the post.
    – Warren Rumak
    Sep 18 '14 at 15:47






  • 1




    @dezza I've updated the answer with a different approach. Try it again.
    – Warren Rumak
    Sep 20 '14 at 20:06


















up vote
175
down vote













If you just need to retrieve a file, you can use the DownloadFile method of the WebClient object:



$client = New-Object System.Net.WebClient
$client.DownloadFile($url, $path)


Where $url is a string representing the file's URL, and $path is representing the local path the file will be saved to.



Note that $path must include the file name; it can't just be a directory.






share|improve this answer



















  • 28




    So far this has been the best solution proposed. Also given that it seems I can rewrite it in one line format as (new-object System.Net.WebClient).DownloadFile( '$url, $path) it is the best correspondence for wget I have seen so far. Thanks!
    – jsalonen
    Nov 28 '11 at 10:49






  • 2




    As a side-note you can also do this asynchronously using something like (new-object System.Net.WebClient).DownloadFileAsync(url,filePath)
    – James
    Apr 23 '13 at 8:49












  • Can we fetch a particular text via Webclient and outout to a notepad ? thanks
    – Mowgli
    Jun 18 '13 at 16:11






  • 5




    Yes, this works out of the box on Windows 7 (that comes with PowerShell 2.0). Sample: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
    – Peter Mortensen
    Jun 6 '14 at 17:57








  • 3




    For just getting a url and ignoring the results (e.g., part of an IIS warmup script) use DownloadData: (new-object System.Net.WebClient).DownloadData($url) | Out-Null
    – BurnsBA
    May 2 '17 at 18:35


















up vote
82
down vote













There is Invoke-WebRequest in the upcoming PowerShell version 3:



Invoke-WebRequest http://www.google.com/ -OutFile c:google.html





share|improve this answer



















  • 8




    all the elegance of dd...
    – gWaldo
    Aug 31 '12 at 15:29






  • 1




    @gWaldo you are kidding–this is a joy to use (speaking as someone just learning PS)
    – Jack Douglas
    Oct 16 '12 at 20:41






  • 8




    I just mean that the -Outfile parameter seems extraneous when you could just use > (to overwrite) or >> (to append) to a file.
    – gWaldo
    Oct 17 '12 at 13:12








  • 5




    @gWaldo or even deduce the filename from the URL just like wget does :)
    – Peltier
    Jul 17 '13 at 10:29






  • 5




    And as of PS 4.0, wget and curl are aliasted to Invoke-WebRequest (iwr) by default :D
    – Bob
    Mar 25 '14 at 16:12


















up vote
16
down vote













It's a bit messy but there is this blog post which gives you instructions for downloading files.



Alternatively (and this is one I'd recommend) you can use BITS:



Import-Module BitsTransfer
Start-BitsTransfer -source "http://urlToDownload"


It will show progress and will download the file to the current directory.






share|improve this answer

















  • 2




    BITS relies on support at the server end, if available this works in the background and you can get progress updates with other cmdlets.
    – Richard
    Nov 28 '11 at 10:42






  • 2




    I tried to fetch google.com, but all I get is Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)). I'm puzzled :|
    – jsalonen
    Nov 28 '11 at 10:45






  • 1




    @jsalonen I think that BITS will only download files rather than pages. As Richard says it relies on some server side support (although I don't think it's Microsoft specific).
    – Matthew Steeples
    Nov 28 '11 at 11:09










  • I see and I think I get the point in using BITS, however, its not what I'm looking for in here.
    – jsalonen
    Nov 28 '11 at 11:23










  • I need to remember that one. Thanks!
    – flickerfly
    Jan 8 '15 at 22:40


















up vote
6
down vote













PowerShell V4 One-liner:



(iwr http://blog.stackexchange.com/).Content >index.html`


or



(iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4




This is basically Warren's (awesome) V3 one-liner (thanks for this!) - with just a tiny change in order to make it work in a V4 PowerShell.



Warren's one-liner - which simply uses wget rather than iwr - should still work for V3 (At least, I guess; didn't tested it, though). Anyway. But when trying to execute it in a V4 PowerShell (as I tried), you'll see PowerShell failing to resolve wget as a valid cmdlet/program.



For those interested, that is - as I picked up from Bob's comment in reply to the accepted answer (thanks, man!) - because as of PowerShell V4, wget and curl are aliased to Invoke-WebRequest, set to iwr by default. Thus, wget can not be resolved (as well as curl can not work here).






share|improve this answer






























    up vote
    4
    down vote













    Here is a PowerShell function that resolves short URLs before downloading the file



    function Get-FileFromUri {  
    param(
    [parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
    [string]
    [Alias('Uri')]
    $Url,
    [parameter(Mandatory=$false, Position=1)]
    [string]
    [Alias('Folder')]
    $FolderPath
    )
    process {
    try {
    # resolve short URLs
    $req = [System.Net.HttpWebRequest]::Create($Url)
    $req.Method = "HEAD"
    $response = $req.GetResponse()
    $fUri = $response.ResponseUri
    $filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
    $response.Close()
    # download file
    $destination = (Get-Item -Path "." -Verbose).FullName
    if ($FolderPath) { $destination = $FolderPath }
    if ($destination.EndsWith('')) {
    $destination += $filename
    } else {
    $destination += '' + $filename
    }
    $webclient = New-Object System.Net.webclient
    $webclient.downloadfile($fUri.AbsoluteUri, $destination)
    write-host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
    } catch {
    write-host -ForegroundColor DarkRed $_.Exception.Message
    }
    }
    }


    Use it like this to download the file to the current folder:



    Get-FileFromUri http://example.com/url/of/example/file  


    Or to download the file to a specified folder:



    Get-FileFromUri http://example.com/url/of/example/file  C:example-folder  





    share|improve this answer






























      up vote
      2
      down vote













      The following function will get a URL.



      function Get-URLContent ($url, $path) {
      if (!$path) {
      $path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
      }
      $wc = New-Object Net.WebClient
      $wc.UseDefaultCredentials = $true
      $wc.Proxy.Credentials = $wc.Credentials
      $wc.DownloadFile($url, $path)
      }


      Some comments:




      1. The last 4 lines are only needed if you are behind an authenticating proxy. For simple use, (New-Object Net.WebClient).DownloadFile($url, $path) works fine.

      2. The path must be absolute, as the download is not done in your current directory, so relative paths will result in the download getting lost somewhere.

      3. The if (!$path) {...} section handles the simple case where you just want to download the file to the current directory using the name given in the URL.






      share|improve this answer




























        up vote
        1
        down vote













        Use Windows 10 bash shell which includes wget once the windows feature is setup.



        How to install Ubuntu bash shell on Windows:



        YouTube: Running Bash on Ubuntu on Windows!



        Windows Subsystem for Linux Documentation






        share|improve this answer



















        • 1




          Consider adding some quoted reference to this answer supporting what you state in case the link ever dies so the answer content is still available that is currently only available via that link per your suggestion.
          – Pimp Juice IT
          Sep 27 '17 at 3:36


















        up vote
        -1
        down vote













        Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"



        Note: -outfile parameter expects a string, so if your filename starts with a number, and not enclosed in quotes, no output file is created.



        This does not affect filenames starting with a letter.






        share|improve this answer





















        • This solution is mentioned in other answers (wget is an alias of Invoke-WebRequest, and one similar to the above)
          – bertieb
          Nov 27 at 18:27












        • The point of the answer was to emphasise the note. None of the answers deal with no file being created due to the syntax error.
          – zimba
          Nov 28 at 10:28










        • That should really be a comment on the other answer[s]
          – bertieb
          Nov 28 at 13:02











        Your Answer








        StackExchange.ready(function() {
        var channelOptions = {
        tags: "".split(" "),
        id: "3"
        };
        initTagRenderer("".split(" "), "".split(" "), channelOptions);

        StackExchange.using("externalEditor", function() {
        // Have to fire editor after snippets, if snippets enabled
        if (StackExchange.settings.snippets.snippetsEnabled) {
        StackExchange.using("snippets", function() {
        createEditor();
        });
        }
        else {
        createEditor();
        }
        });

        function createEditor() {
        StackExchange.prepareEditor({
        heartbeatType: 'answer',
        convertImagesToLinks: true,
        noModals: true,
        showLowRepImageUploadWarning: true,
        reputationToPostImages: 10,
        bindNavPrevention: true,
        postfix: "",
        imageUploader: {
        brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
        contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
        allowUrls: true
        },
        onDemand: true,
        discardSelector: ".discard-answer"
        ,immediatelyShowMarkdownHelp:true
        });


        }
        });














        draft saved

        draft discarded


















        StackExchange.ready(
        function () {
        StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f362152%2fnative-alternative-to-wget-in-windows-powershell%23new-answer', 'question_page');
        }
        );

        Post as a guest















        Required, but never shown

























        9 Answers
        9






        active

        oldest

        votes








        9 Answers
        9






        active

        oldest

        votes









        active

        oldest

        votes






        active

        oldest

        votes








        up vote
        211
        down vote



        accepted










        Here's a simple PS 3.0 and later one-liner that works and doesn't involve much PS barf:



        wget http://blog.stackexchange.com/ -OutFile out.html


        Note that:





        • wget is an alias for Invoke-WebRequest

        • Invoke-WebRequest returns a HtmlWebResponseObject, which contains a lot of useful HTML parsing properties such as Links, Images, Forms, InputFields, etc., but in this case we're just using the raw Content

        • The file contents are stored in memory before writing to disk, making this approach unsuitable for downloading large files


        • On Windows Server Core installations, you'll need to write this as



          wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html



        • Prior to Sep 20 2014, I suggested



          (wget http://blog.stackexchange.com/).Content >out.html


          as an answer.  However, this doesn't work in all cases, as the > operator (which is an alias for Out-File) converts the input to Unicode.




        If you are using Windows 7, you will need to install version 4 or newer of the Windows Management Framework.



        You may find that doing a $ProgressPreference = "silentlyContinue" before Invoke-WebRequest will significantly improve download speed with large files; this variable controls whether the progress UI is rendered.






        share|improve this answer



















        • 3




          This is now the correct answer, and I ran into wget accidentally testing if I had the actual wget installed. Annoying that it can't get the filename easily (you have to specify it in the output redirection), but this option has a better UI than the real wget (in my opinion) so there's that.
          – Matthew Scharley
          Jan 14 '14 at 0:52








        • 13




          But Windows 7 only comes with PowerShell 2.0, and the result will be "The term 'Invoke-WebRequest' is not recognized as the name of a cmdlet, ...".
          – Peter Mortensen
          Jun 6 '14 at 17:51








        • 14




          Fair warning: This method will put the entire content of the file into memory before writing it out to the file. This is not a good solution for downloading large files.
          – im_nullable
          Jul 13 '14 at 6:35






        • 1




          @im_nullable, good call -- I've added that to the post.
          – Warren Rumak
          Sep 18 '14 at 15:47






        • 1




          @dezza I've updated the answer with a different approach. Try it again.
          – Warren Rumak
          Sep 20 '14 at 20:06















        up vote
        211
        down vote



        accepted










        Here's a simple PS 3.0 and later one-liner that works and doesn't involve much PS barf:



        wget http://blog.stackexchange.com/ -OutFile out.html


        Note that:





        • wget is an alias for Invoke-WebRequest

        • Invoke-WebRequest returns a HtmlWebResponseObject, which contains a lot of useful HTML parsing properties such as Links, Images, Forms, InputFields, etc., but in this case we're just using the raw Content

        • The file contents are stored in memory before writing to disk, making this approach unsuitable for downloading large files


        • On Windows Server Core installations, you'll need to write this as



          wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html



        • Prior to Sep 20 2014, I suggested



          (wget http://blog.stackexchange.com/).Content >out.html


          as an answer.  However, this doesn't work in all cases, as the > operator (which is an alias for Out-File) converts the input to Unicode.




        If you are using Windows 7, you will need to install version 4 or newer of the Windows Management Framework.



        You may find that doing a $ProgressPreference = "silentlyContinue" before Invoke-WebRequest will significantly improve download speed with large files; this variable controls whether the progress UI is rendered.






        share|improve this answer



















        • 3




          This is now the correct answer, and I ran into wget accidentally testing if I had the actual wget installed. Annoying that it can't get the filename easily (you have to specify it in the output redirection), but this option has a better UI than the real wget (in my opinion) so there's that.
          – Matthew Scharley
          Jan 14 '14 at 0:52








        • 13




          But Windows 7 only comes with PowerShell 2.0, and the result will be "The term 'Invoke-WebRequest' is not recognized as the name of a cmdlet, ...".
          – Peter Mortensen
          Jun 6 '14 at 17:51








        • 14




          Fair warning: This method will put the entire content of the file into memory before writing it out to the file. This is not a good solution for downloading large files.
          – im_nullable
          Jul 13 '14 at 6:35






        • 1




          @im_nullable, good call -- I've added that to the post.
          – Warren Rumak
          Sep 18 '14 at 15:47






        • 1




          @dezza I've updated the answer with a different approach. Try it again.
          – Warren Rumak
          Sep 20 '14 at 20:06













        up vote
        211
        down vote



        accepted







        up vote
        211
        down vote



        accepted






        Here's a simple PS 3.0 and later one-liner that works and doesn't involve much PS barf:



        wget http://blog.stackexchange.com/ -OutFile out.html


        Note that:





        • wget is an alias for Invoke-WebRequest

        • Invoke-WebRequest returns a HtmlWebResponseObject, which contains a lot of useful HTML parsing properties such as Links, Images, Forms, InputFields, etc., but in this case we're just using the raw Content

        • The file contents are stored in memory before writing to disk, making this approach unsuitable for downloading large files


        • On Windows Server Core installations, you'll need to write this as



          wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html



        • Prior to Sep 20 2014, I suggested



          (wget http://blog.stackexchange.com/).Content >out.html


          as an answer.  However, this doesn't work in all cases, as the > operator (which is an alias for Out-File) converts the input to Unicode.




        If you are using Windows 7, you will need to install version 4 or newer of the Windows Management Framework.



        You may find that doing a $ProgressPreference = "silentlyContinue" before Invoke-WebRequest will significantly improve download speed with large files; this variable controls whether the progress UI is rendered.






        share|improve this answer














        Here's a simple PS 3.0 and later one-liner that works and doesn't involve much PS barf:



        wget http://blog.stackexchange.com/ -OutFile out.html


        Note that:





        • wget is an alias for Invoke-WebRequest

        • Invoke-WebRequest returns a HtmlWebResponseObject, which contains a lot of useful HTML parsing properties such as Links, Images, Forms, InputFields, etc., but in this case we're just using the raw Content

        • The file contents are stored in memory before writing to disk, making this approach unsuitable for downloading large files


        • On Windows Server Core installations, you'll need to write this as



          wget http://blog.stackexchange.com/ -UseBasicParsing -OutFile out.html



        • Prior to Sep 20 2014, I suggested



          (wget http://blog.stackexchange.com/).Content >out.html


          as an answer.  However, this doesn't work in all cases, as the > operator (which is an alias for Out-File) converts the input to Unicode.




        If you are using Windows 7, you will need to install version 4 or newer of the Windows Management Framework.



        You may find that doing a $ProgressPreference = "silentlyContinue" before Invoke-WebRequest will significantly improve download speed with large files; this variable controls whether the progress UI is rendered.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Feb 13 at 6:14

























        answered Dec 26 '13 at 6:47









        Warren Rumak

        2,3171105




        2,3171105








        • 3




          This is now the correct answer, and I ran into wget accidentally testing if I had the actual wget installed. Annoying that it can't get the filename easily (you have to specify it in the output redirection), but this option has a better UI than the real wget (in my opinion) so there's that.
          – Matthew Scharley
          Jan 14 '14 at 0:52








        • 13




          But Windows 7 only comes with PowerShell 2.0, and the result will be "The term 'Invoke-WebRequest' is not recognized as the name of a cmdlet, ...".
          – Peter Mortensen
          Jun 6 '14 at 17:51








        • 14




          Fair warning: This method will put the entire content of the file into memory before writing it out to the file. This is not a good solution for downloading large files.
          – im_nullable
          Jul 13 '14 at 6:35






        • 1




          @im_nullable, good call -- I've added that to the post.
          – Warren Rumak
          Sep 18 '14 at 15:47






        • 1




          @dezza I've updated the answer with a different approach. Try it again.
          – Warren Rumak
          Sep 20 '14 at 20:06














        • 3




          This is now the correct answer, and I ran into wget accidentally testing if I had the actual wget installed. Annoying that it can't get the filename easily (you have to specify it in the output redirection), but this option has a better UI than the real wget (in my opinion) so there's that.
          – Matthew Scharley
          Jan 14 '14 at 0:52








        • 13




          But Windows 7 only comes with PowerShell 2.0, and the result will be "The term 'Invoke-WebRequest' is not recognized as the name of a cmdlet, ...".
          – Peter Mortensen
          Jun 6 '14 at 17:51








        • 14




          Fair warning: This method will put the entire content of the file into memory before writing it out to the file. This is not a good solution for downloading large files.
          – im_nullable
          Jul 13 '14 at 6:35






        • 1




          @im_nullable, good call -- I've added that to the post.
          – Warren Rumak
          Sep 18 '14 at 15:47






        • 1




          @dezza I've updated the answer with a different approach. Try it again.
          – Warren Rumak
          Sep 20 '14 at 20:06








        3




        3




        This is now the correct answer, and I ran into wget accidentally testing if I had the actual wget installed. Annoying that it can't get the filename easily (you have to specify it in the output redirection), but this option has a better UI than the real wget (in my opinion) so there's that.
        – Matthew Scharley
        Jan 14 '14 at 0:52






        This is now the correct answer, and I ran into wget accidentally testing if I had the actual wget installed. Annoying that it can't get the filename easily (you have to specify it in the output redirection), but this option has a better UI than the real wget (in my opinion) so there's that.
        – Matthew Scharley
        Jan 14 '14 at 0:52






        13




        13




        But Windows 7 only comes with PowerShell 2.0, and the result will be "The term 'Invoke-WebRequest' is not recognized as the name of a cmdlet, ...".
        – Peter Mortensen
        Jun 6 '14 at 17:51






        But Windows 7 only comes with PowerShell 2.0, and the result will be "The term 'Invoke-WebRequest' is not recognized as the name of a cmdlet, ...".
        – Peter Mortensen
        Jun 6 '14 at 17:51






        14




        14




        Fair warning: This method will put the entire content of the file into memory before writing it out to the file. This is not a good solution for downloading large files.
        – im_nullable
        Jul 13 '14 at 6:35




        Fair warning: This method will put the entire content of the file into memory before writing it out to the file. This is not a good solution for downloading large files.
        – im_nullable
        Jul 13 '14 at 6:35




        1




        1




        @im_nullable, good call -- I've added that to the post.
        – Warren Rumak
        Sep 18 '14 at 15:47




        @im_nullable, good call -- I've added that to the post.
        – Warren Rumak
        Sep 18 '14 at 15:47




        1




        1




        @dezza I've updated the answer with a different approach. Try it again.
        – Warren Rumak
        Sep 20 '14 at 20:06




        @dezza I've updated the answer with a different approach. Try it again.
        – Warren Rumak
        Sep 20 '14 at 20:06












        up vote
        175
        down vote













        If you just need to retrieve a file, you can use the DownloadFile method of the WebClient object:



        $client = New-Object System.Net.WebClient
        $client.DownloadFile($url, $path)


        Where $url is a string representing the file's URL, and $path is representing the local path the file will be saved to.



        Note that $path must include the file name; it can't just be a directory.






        share|improve this answer



















        • 28




          So far this has been the best solution proposed. Also given that it seems I can rewrite it in one line format as (new-object System.Net.WebClient).DownloadFile( '$url, $path) it is the best correspondence for wget I have seen so far. Thanks!
          – jsalonen
          Nov 28 '11 at 10:49






        • 2




          As a side-note you can also do this asynchronously using something like (new-object System.Net.WebClient).DownloadFileAsync(url,filePath)
          – James
          Apr 23 '13 at 8:49












        • Can we fetch a particular text via Webclient and outout to a notepad ? thanks
          – Mowgli
          Jun 18 '13 at 16:11






        • 5




          Yes, this works out of the box on Windows 7 (that comes with PowerShell 2.0). Sample: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
          – Peter Mortensen
          Jun 6 '14 at 17:57








        • 3




          For just getting a url and ignoring the results (e.g., part of an IIS warmup script) use DownloadData: (new-object System.Net.WebClient).DownloadData($url) | Out-Null
          – BurnsBA
          May 2 '17 at 18:35















        up vote
        175
        down vote













        If you just need to retrieve a file, you can use the DownloadFile method of the WebClient object:



        $client = New-Object System.Net.WebClient
        $client.DownloadFile($url, $path)


        Where $url is a string representing the file's URL, and $path is representing the local path the file will be saved to.



        Note that $path must include the file name; it can't just be a directory.






        share|improve this answer



















        • 28




          So far this has been the best solution proposed. Also given that it seems I can rewrite it in one line format as (new-object System.Net.WebClient).DownloadFile( '$url, $path) it is the best correspondence for wget I have seen so far. Thanks!
          – jsalonen
          Nov 28 '11 at 10:49






        • 2




          As a side-note you can also do this asynchronously using something like (new-object System.Net.WebClient).DownloadFileAsync(url,filePath)
          – James
          Apr 23 '13 at 8:49












        • Can we fetch a particular text via Webclient and outout to a notepad ? thanks
          – Mowgli
          Jun 18 '13 at 16:11






        • 5




          Yes, this works out of the box on Windows 7 (that comes with PowerShell 2.0). Sample: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
          – Peter Mortensen
          Jun 6 '14 at 17:57








        • 3




          For just getting a url and ignoring the results (e.g., part of an IIS warmup script) use DownloadData: (new-object System.Net.WebClient).DownloadData($url) | Out-Null
          – BurnsBA
          May 2 '17 at 18:35













        up vote
        175
        down vote










        up vote
        175
        down vote









        If you just need to retrieve a file, you can use the DownloadFile method of the WebClient object:



        $client = New-Object System.Net.WebClient
        $client.DownloadFile($url, $path)


        Where $url is a string representing the file's URL, and $path is representing the local path the file will be saved to.



        Note that $path must include the file name; it can't just be a directory.






        share|improve this answer














        If you just need to retrieve a file, you can use the DownloadFile method of the WebClient object:



        $client = New-Object System.Net.WebClient
        $client.DownloadFile($url, $path)


        Where $url is a string representing the file's URL, and $path is representing the local path the file will be saved to.



        Note that $path must include the file name; it can't just be a directory.







        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Apr 29 '16 at 16:46









        Peter Mortensen

        8,331166184




        8,331166184










        answered Nov 28 '11 at 10:20









        Traveling Tech Guy

        8,06872638




        8,06872638








        • 28




          So far this has been the best solution proposed. Also given that it seems I can rewrite it in one line format as (new-object System.Net.WebClient).DownloadFile( '$url, $path) it is the best correspondence for wget I have seen so far. Thanks!
          – jsalonen
          Nov 28 '11 at 10:49






        • 2




          As a side-note you can also do this asynchronously using something like (new-object System.Net.WebClient).DownloadFileAsync(url,filePath)
          – James
          Apr 23 '13 at 8:49












        • Can we fetch a particular text via Webclient and outout to a notepad ? thanks
          – Mowgli
          Jun 18 '13 at 16:11






        • 5




          Yes, this works out of the box on Windows 7 (that comes with PowerShell 2.0). Sample: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
          – Peter Mortensen
          Jun 6 '14 at 17:57








        • 3




          For just getting a url and ignoring the results (e.g., part of an IIS warmup script) use DownloadData: (new-object System.Net.WebClient).DownloadData($url) | Out-Null
          – BurnsBA
          May 2 '17 at 18:35














        • 28




          So far this has been the best solution proposed. Also given that it seems I can rewrite it in one line format as (new-object System.Net.WebClient).DownloadFile( '$url, $path) it is the best correspondence for wget I have seen so far. Thanks!
          – jsalonen
          Nov 28 '11 at 10:49






        • 2




          As a side-note you can also do this asynchronously using something like (new-object System.Net.WebClient).DownloadFileAsync(url,filePath)
          – James
          Apr 23 '13 at 8:49












        • Can we fetch a particular text via Webclient and outout to a notepad ? thanks
          – Mowgli
          Jun 18 '13 at 16:11






        • 5




          Yes, this works out of the box on Windows 7 (that comes with PowerShell 2.0). Sample: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
          – Peter Mortensen
          Jun 6 '14 at 17:57








        • 3




          For just getting a url and ignoring the results (e.g., part of an IIS warmup script) use DownloadData: (new-object System.Net.WebClient).DownloadData($url) | Out-Null
          – BurnsBA
          May 2 '17 at 18:35








        28




        28




        So far this has been the best solution proposed. Also given that it seems I can rewrite it in one line format as (new-object System.Net.WebClient).DownloadFile( '$url, $path) it is the best correspondence for wget I have seen so far. Thanks!
        – jsalonen
        Nov 28 '11 at 10:49




        So far this has been the best solution proposed. Also given that it seems I can rewrite it in one line format as (new-object System.Net.WebClient).DownloadFile( '$url, $path) it is the best correspondence for wget I have seen so far. Thanks!
        – jsalonen
        Nov 28 '11 at 10:49




        2




        2




        As a side-note you can also do this asynchronously using something like (new-object System.Net.WebClient).DownloadFileAsync(url,filePath)
        – James
        Apr 23 '13 at 8:49






        As a side-note you can also do this asynchronously using something like (new-object System.Net.WebClient).DownloadFileAsync(url,filePath)
        – James
        Apr 23 '13 at 8:49














        Can we fetch a particular text via Webclient and outout to a notepad ? thanks
        – Mowgli
        Jun 18 '13 at 16:11




        Can we fetch a particular text via Webclient and outout to a notepad ? thanks
        – Mowgli
        Jun 18 '13 at 16:11




        5




        5




        Yes, this works out of the box on Windows 7 (that comes with PowerShell 2.0). Sample: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
        – Peter Mortensen
        Jun 6 '14 at 17:57






        Yes, this works out of the box on Windows 7 (that comes with PowerShell 2.0). Sample: $client.DownloadFile( "http://blog.stackexchange.com/", "c:/temp2/_Download.html")
        – Peter Mortensen
        Jun 6 '14 at 17:57






        3




        3




        For just getting a url and ignoring the results (e.g., part of an IIS warmup script) use DownloadData: (new-object System.Net.WebClient).DownloadData($url) | Out-Null
        – BurnsBA
        May 2 '17 at 18:35




        For just getting a url and ignoring the results (e.g., part of an IIS warmup script) use DownloadData: (new-object System.Net.WebClient).DownloadData($url) | Out-Null
        – BurnsBA
        May 2 '17 at 18:35










        up vote
        82
        down vote













        There is Invoke-WebRequest in the upcoming PowerShell version 3:



        Invoke-WebRequest http://www.google.com/ -OutFile c:google.html





        share|improve this answer



















        • 8




          all the elegance of dd...
          – gWaldo
          Aug 31 '12 at 15:29






        • 1




          @gWaldo you are kidding–this is a joy to use (speaking as someone just learning PS)
          – Jack Douglas
          Oct 16 '12 at 20:41






        • 8




          I just mean that the -Outfile parameter seems extraneous when you could just use > (to overwrite) or >> (to append) to a file.
          – gWaldo
          Oct 17 '12 at 13:12








        • 5




          @gWaldo or even deduce the filename from the URL just like wget does :)
          – Peltier
          Jul 17 '13 at 10:29






        • 5




          And as of PS 4.0, wget and curl are aliasted to Invoke-WebRequest (iwr) by default :D
          – Bob
          Mar 25 '14 at 16:12















        up vote
        82
        down vote













        There is Invoke-WebRequest in the upcoming PowerShell version 3:



        Invoke-WebRequest http://www.google.com/ -OutFile c:google.html





        share|improve this answer



















        • 8




          all the elegance of dd...
          – gWaldo
          Aug 31 '12 at 15:29






        • 1




          @gWaldo you are kidding–this is a joy to use (speaking as someone just learning PS)
          – Jack Douglas
          Oct 16 '12 at 20:41






        • 8




          I just mean that the -Outfile parameter seems extraneous when you could just use > (to overwrite) or >> (to append) to a file.
          – gWaldo
          Oct 17 '12 at 13:12








        • 5




          @gWaldo or even deduce the filename from the URL just like wget does :)
          – Peltier
          Jul 17 '13 at 10:29






        • 5




          And as of PS 4.0, wget and curl are aliasted to Invoke-WebRequest (iwr) by default :D
          – Bob
          Mar 25 '14 at 16:12













        up vote
        82
        down vote










        up vote
        82
        down vote









        There is Invoke-WebRequest in the upcoming PowerShell version 3:



        Invoke-WebRequest http://www.google.com/ -OutFile c:google.html





        share|improve this answer














        There is Invoke-WebRequest in the upcoming PowerShell version 3:



        Invoke-WebRequest http://www.google.com/ -OutFile c:google.html






        share|improve this answer














        share|improve this answer



        share|improve this answer








        edited Apr 29 '16 at 16:48









        Peter Mortensen

        8,331166184




        8,331166184










        answered Aug 10 '12 at 23:38









        user4514

        1,017914




        1,017914








        • 8




          all the elegance of dd...
          – gWaldo
          Aug 31 '12 at 15:29






        • 1




          @gWaldo you are kidding–this is a joy to use (speaking as someone just learning PS)
          – Jack Douglas
          Oct 16 '12 at 20:41






        • 8




          I just mean that the -Outfile parameter seems extraneous when you could just use > (to overwrite) or >> (to append) to a file.
          – gWaldo
          Oct 17 '12 at 13:12








        • 5




          @gWaldo or even deduce the filename from the URL just like wget does :)
          – Peltier
          Jul 17 '13 at 10:29






        • 5




          And as of PS 4.0, wget and curl are aliasted to Invoke-WebRequest (iwr) by default :D
          – Bob
          Mar 25 '14 at 16:12














        • 8




          all the elegance of dd...
          – gWaldo
          Aug 31 '12 at 15:29






        • 1




          @gWaldo you are kidding–this is a joy to use (speaking as someone just learning PS)
          – Jack Douglas
          Oct 16 '12 at 20:41






        • 8




          I just mean that the -Outfile parameter seems extraneous when you could just use > (to overwrite) or >> (to append) to a file.
          – gWaldo
          Oct 17 '12 at 13:12








        • 5




          @gWaldo or even deduce the filename from the URL just like wget does :)
          – Peltier
          Jul 17 '13 at 10:29






        • 5




          And as of PS 4.0, wget and curl are aliasted to Invoke-WebRequest (iwr) by default :D
          – Bob
          Mar 25 '14 at 16:12








        8




        8




        all the elegance of dd...
        – gWaldo
        Aug 31 '12 at 15:29




        all the elegance of dd...
        – gWaldo
        Aug 31 '12 at 15:29




        1




        1




        @gWaldo you are kidding–this is a joy to use (speaking as someone just learning PS)
        – Jack Douglas
        Oct 16 '12 at 20:41




        @gWaldo you are kidding–this is a joy to use (speaking as someone just learning PS)
        – Jack Douglas
        Oct 16 '12 at 20:41




        8




        8




        I just mean that the -Outfile parameter seems extraneous when you could just use > (to overwrite) or >> (to append) to a file.
        – gWaldo
        Oct 17 '12 at 13:12






        I just mean that the -Outfile parameter seems extraneous when you could just use > (to overwrite) or >> (to append) to a file.
        – gWaldo
        Oct 17 '12 at 13:12






        5




        5




        @gWaldo or even deduce the filename from the URL just like wget does :)
        – Peltier
        Jul 17 '13 at 10:29




        @gWaldo or even deduce the filename from the URL just like wget does :)
        – Peltier
        Jul 17 '13 at 10:29




        5




        5




        And as of PS 4.0, wget and curl are aliasted to Invoke-WebRequest (iwr) by default :D
        – Bob
        Mar 25 '14 at 16:12




        And as of PS 4.0, wget and curl are aliasted to Invoke-WebRequest (iwr) by default :D
        – Bob
        Mar 25 '14 at 16:12










        up vote
        16
        down vote













        It's a bit messy but there is this blog post which gives you instructions for downloading files.



        Alternatively (and this is one I'd recommend) you can use BITS:



        Import-Module BitsTransfer
        Start-BitsTransfer -source "http://urlToDownload"


        It will show progress and will download the file to the current directory.






        share|improve this answer

















        • 2




          BITS relies on support at the server end, if available this works in the background and you can get progress updates with other cmdlets.
          – Richard
          Nov 28 '11 at 10:42






        • 2




          I tried to fetch google.com, but all I get is Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)). I'm puzzled :|
          – jsalonen
          Nov 28 '11 at 10:45






        • 1




          @jsalonen I think that BITS will only download files rather than pages. As Richard says it relies on some server side support (although I don't think it's Microsoft specific).
          – Matthew Steeples
          Nov 28 '11 at 11:09










        • I see and I think I get the point in using BITS, however, its not what I'm looking for in here.
          – jsalonen
          Nov 28 '11 at 11:23










        • I need to remember that one. Thanks!
          – flickerfly
          Jan 8 '15 at 22:40















        up vote
        16
        down vote













        It's a bit messy but there is this blog post which gives you instructions for downloading files.



        Alternatively (and this is one I'd recommend) you can use BITS:



        Import-Module BitsTransfer
        Start-BitsTransfer -source "http://urlToDownload"


        It will show progress and will download the file to the current directory.






        share|improve this answer

















        • 2




          BITS relies on support at the server end, if available this works in the background and you can get progress updates with other cmdlets.
          – Richard
          Nov 28 '11 at 10:42






        • 2




          I tried to fetch google.com, but all I get is Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)). I'm puzzled :|
          – jsalonen
          Nov 28 '11 at 10:45






        • 1




          @jsalonen I think that BITS will only download files rather than pages. As Richard says it relies on some server side support (although I don't think it's Microsoft specific).
          – Matthew Steeples
          Nov 28 '11 at 11:09










        • I see and I think I get the point in using BITS, however, its not what I'm looking for in here.
          – jsalonen
          Nov 28 '11 at 11:23










        • I need to remember that one. Thanks!
          – flickerfly
          Jan 8 '15 at 22:40













        up vote
        16
        down vote










        up vote
        16
        down vote









        It's a bit messy but there is this blog post which gives you instructions for downloading files.



        Alternatively (and this is one I'd recommend) you can use BITS:



        Import-Module BitsTransfer
        Start-BitsTransfer -source "http://urlToDownload"


        It will show progress and will download the file to the current directory.






        share|improve this answer












        It's a bit messy but there is this blog post which gives you instructions for downloading files.



        Alternatively (and this is one I'd recommend) you can use BITS:



        Import-Module BitsTransfer
        Start-BitsTransfer -source "http://urlToDownload"


        It will show progress and will download the file to the current directory.







        share|improve this answer












        share|improve this answer



        share|improve this answer










        answered Nov 28 '11 at 10:18









        Matthew Steeples

        2,0381422




        2,0381422








        • 2




          BITS relies on support at the server end, if available this works in the background and you can get progress updates with other cmdlets.
          – Richard
          Nov 28 '11 at 10:42






        • 2




          I tried to fetch google.com, but all I get is Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)). I'm puzzled :|
          – jsalonen
          Nov 28 '11 at 10:45






        • 1




          @jsalonen I think that BITS will only download files rather than pages. As Richard says it relies on some server side support (although I don't think it's Microsoft specific).
          – Matthew Steeples
          Nov 28 '11 at 11:09










        • I see and I think I get the point in using BITS, however, its not what I'm looking for in here.
          – jsalonen
          Nov 28 '11 at 11:23










        • I need to remember that one. Thanks!
          – flickerfly
          Jan 8 '15 at 22:40














        • 2




          BITS relies on support at the server end, if available this works in the background and you can get progress updates with other cmdlets.
          – Richard
          Nov 28 '11 at 10:42






        • 2




          I tried to fetch google.com, but all I get is Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)). I'm puzzled :|
          – jsalonen
          Nov 28 '11 at 10:45






        • 1




          @jsalonen I think that BITS will only download files rather than pages. As Richard says it relies on some server side support (although I don't think it's Microsoft specific).
          – Matthew Steeples
          Nov 28 '11 at 11:09










        • I see and I think I get the point in using BITS, however, its not what I'm looking for in here.
          – jsalonen
          Nov 28 '11 at 11:23










        • I need to remember that one. Thanks!
          – flickerfly
          Jan 8 '15 at 22:40








        2




        2




        BITS relies on support at the server end, if available this works in the background and you can get progress updates with other cmdlets.
        – Richard
        Nov 28 '11 at 10:42




        BITS relies on support at the server end, if available this works in the background and you can get progress updates with other cmdlets.
        – Richard
        Nov 28 '11 at 10:42




        2




        2




        I tried to fetch google.com, but all I get is Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)). I'm puzzled :|
        – jsalonen
        Nov 28 '11 at 10:45




        I tried to fetch google.com, but all I get is Start-BitsTransfer : Access is denied. (Exception from HRESULT: 0x80070005 (E_ACCESSDENIED)). I'm puzzled :|
        – jsalonen
        Nov 28 '11 at 10:45




        1




        1




        @jsalonen I think that BITS will only download files rather than pages. As Richard says it relies on some server side support (although I don't think it's Microsoft specific).
        – Matthew Steeples
        Nov 28 '11 at 11:09




        @jsalonen I think that BITS will only download files rather than pages. As Richard says it relies on some server side support (although I don't think it's Microsoft specific).
        – Matthew Steeples
        Nov 28 '11 at 11:09












        I see and I think I get the point in using BITS, however, its not what I'm looking for in here.
        – jsalonen
        Nov 28 '11 at 11:23




        I see and I think I get the point in using BITS, however, its not what I'm looking for in here.
        – jsalonen
        Nov 28 '11 at 11:23












        I need to remember that one. Thanks!
        – flickerfly
        Jan 8 '15 at 22:40




        I need to remember that one. Thanks!
        – flickerfly
        Jan 8 '15 at 22:40










        up vote
        6
        down vote













        PowerShell V4 One-liner:



        (iwr http://blog.stackexchange.com/).Content >index.html`


        or



        (iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4




        This is basically Warren's (awesome) V3 one-liner (thanks for this!) - with just a tiny change in order to make it work in a V4 PowerShell.



        Warren's one-liner - which simply uses wget rather than iwr - should still work for V3 (At least, I guess; didn't tested it, though). Anyway. But when trying to execute it in a V4 PowerShell (as I tried), you'll see PowerShell failing to resolve wget as a valid cmdlet/program.



        For those interested, that is - as I picked up from Bob's comment in reply to the accepted answer (thanks, man!) - because as of PowerShell V4, wget and curl are aliased to Invoke-WebRequest, set to iwr by default. Thus, wget can not be resolved (as well as curl can not work here).






        share|improve this answer



























          up vote
          6
          down vote













          PowerShell V4 One-liner:



          (iwr http://blog.stackexchange.com/).Content >index.html`


          or



          (iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4




          This is basically Warren's (awesome) V3 one-liner (thanks for this!) - with just a tiny change in order to make it work in a V4 PowerShell.



          Warren's one-liner - which simply uses wget rather than iwr - should still work for V3 (At least, I guess; didn't tested it, though). Anyway. But when trying to execute it in a V4 PowerShell (as I tried), you'll see PowerShell failing to resolve wget as a valid cmdlet/program.



          For those interested, that is - as I picked up from Bob's comment in reply to the accepted answer (thanks, man!) - because as of PowerShell V4, wget and curl are aliased to Invoke-WebRequest, set to iwr by default. Thus, wget can not be resolved (as well as curl can not work here).






          share|improve this answer

























            up vote
            6
            down vote










            up vote
            6
            down vote









            PowerShell V4 One-liner:



            (iwr http://blog.stackexchange.com/).Content >index.html`


            or



            (iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4




            This is basically Warren's (awesome) V3 one-liner (thanks for this!) - with just a tiny change in order to make it work in a V4 PowerShell.



            Warren's one-liner - which simply uses wget rather than iwr - should still work for V3 (At least, I guess; didn't tested it, though). Anyway. But when trying to execute it in a V4 PowerShell (as I tried), you'll see PowerShell failing to resolve wget as a valid cmdlet/program.



            For those interested, that is - as I picked up from Bob's comment in reply to the accepted answer (thanks, man!) - because as of PowerShell V4, wget and curl are aliased to Invoke-WebRequest, set to iwr by default. Thus, wget can not be resolved (as well as curl can not work here).






            share|improve this answer














            PowerShell V4 One-liner:



            (iwr http://blog.stackexchange.com/).Content >index.html`


            or



            (iwr http://demo.mediacore.tv/files/31266.mp4).Content >video.mp4




            This is basically Warren's (awesome) V3 one-liner (thanks for this!) - with just a tiny change in order to make it work in a V4 PowerShell.



            Warren's one-liner - which simply uses wget rather than iwr - should still work for V3 (At least, I guess; didn't tested it, though). Anyway. But when trying to execute it in a V4 PowerShell (as I tried), you'll see PowerShell failing to resolve wget as a valid cmdlet/program.



            For those interested, that is - as I picked up from Bob's comment in reply to the accepted answer (thanks, man!) - because as of PowerShell V4, wget and curl are aliased to Invoke-WebRequest, set to iwr by default. Thus, wget can not be resolved (as well as curl can not work here).







            share|improve this answer














            share|improve this answer



            share|improve this answer








            edited Mar 20 '17 at 10:16









            Community

            1




            1










            answered May 25 '14 at 10:22









            eyecatchUp

            16517




            16517






















                up vote
                4
                down vote













                Here is a PowerShell function that resolves short URLs before downloading the file



                function Get-FileFromUri {  
                param(
                [parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
                [string]
                [Alias('Uri')]
                $Url,
                [parameter(Mandatory=$false, Position=1)]
                [string]
                [Alias('Folder')]
                $FolderPath
                )
                process {
                try {
                # resolve short URLs
                $req = [System.Net.HttpWebRequest]::Create($Url)
                $req.Method = "HEAD"
                $response = $req.GetResponse()
                $fUri = $response.ResponseUri
                $filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
                $response.Close()
                # download file
                $destination = (Get-Item -Path "." -Verbose).FullName
                if ($FolderPath) { $destination = $FolderPath }
                if ($destination.EndsWith('')) {
                $destination += $filename
                } else {
                $destination += '' + $filename
                }
                $webclient = New-Object System.Net.webclient
                $webclient.downloadfile($fUri.AbsoluteUri, $destination)
                write-host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
                } catch {
                write-host -ForegroundColor DarkRed $_.Exception.Message
                }
                }
                }


                Use it like this to download the file to the current folder:



                Get-FileFromUri http://example.com/url/of/example/file  


                Or to download the file to a specified folder:



                Get-FileFromUri http://example.com/url/of/example/file  C:example-folder  





                share|improve this answer



























                  up vote
                  4
                  down vote













                  Here is a PowerShell function that resolves short URLs before downloading the file



                  function Get-FileFromUri {  
                  param(
                  [parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
                  [string]
                  [Alias('Uri')]
                  $Url,
                  [parameter(Mandatory=$false, Position=1)]
                  [string]
                  [Alias('Folder')]
                  $FolderPath
                  )
                  process {
                  try {
                  # resolve short URLs
                  $req = [System.Net.HttpWebRequest]::Create($Url)
                  $req.Method = "HEAD"
                  $response = $req.GetResponse()
                  $fUri = $response.ResponseUri
                  $filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
                  $response.Close()
                  # download file
                  $destination = (Get-Item -Path "." -Verbose).FullName
                  if ($FolderPath) { $destination = $FolderPath }
                  if ($destination.EndsWith('')) {
                  $destination += $filename
                  } else {
                  $destination += '' + $filename
                  }
                  $webclient = New-Object System.Net.webclient
                  $webclient.downloadfile($fUri.AbsoluteUri, $destination)
                  write-host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
                  } catch {
                  write-host -ForegroundColor DarkRed $_.Exception.Message
                  }
                  }
                  }


                  Use it like this to download the file to the current folder:



                  Get-FileFromUri http://example.com/url/of/example/file  


                  Or to download the file to a specified folder:



                  Get-FileFromUri http://example.com/url/of/example/file  C:example-folder  





                  share|improve this answer

























                    up vote
                    4
                    down vote










                    up vote
                    4
                    down vote









                    Here is a PowerShell function that resolves short URLs before downloading the file



                    function Get-FileFromUri {  
                    param(
                    [parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
                    [string]
                    [Alias('Uri')]
                    $Url,
                    [parameter(Mandatory=$false, Position=1)]
                    [string]
                    [Alias('Folder')]
                    $FolderPath
                    )
                    process {
                    try {
                    # resolve short URLs
                    $req = [System.Net.HttpWebRequest]::Create($Url)
                    $req.Method = "HEAD"
                    $response = $req.GetResponse()
                    $fUri = $response.ResponseUri
                    $filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
                    $response.Close()
                    # download file
                    $destination = (Get-Item -Path "." -Verbose).FullName
                    if ($FolderPath) { $destination = $FolderPath }
                    if ($destination.EndsWith('')) {
                    $destination += $filename
                    } else {
                    $destination += '' + $filename
                    }
                    $webclient = New-Object System.Net.webclient
                    $webclient.downloadfile($fUri.AbsoluteUri, $destination)
                    write-host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
                    } catch {
                    write-host -ForegroundColor DarkRed $_.Exception.Message
                    }
                    }
                    }


                    Use it like this to download the file to the current folder:



                    Get-FileFromUri http://example.com/url/of/example/file  


                    Or to download the file to a specified folder:



                    Get-FileFromUri http://example.com/url/of/example/file  C:example-folder  





                    share|improve this answer














                    Here is a PowerShell function that resolves short URLs before downloading the file



                    function Get-FileFromUri {  
                    param(
                    [parameter(Mandatory=$true, Position=0, ValueFromPipeline=$true, ValueFromPipelineByPropertyName=$true)]
                    [string]
                    [Alias('Uri')]
                    $Url,
                    [parameter(Mandatory=$false, Position=1)]
                    [string]
                    [Alias('Folder')]
                    $FolderPath
                    )
                    process {
                    try {
                    # resolve short URLs
                    $req = [System.Net.HttpWebRequest]::Create($Url)
                    $req.Method = "HEAD"
                    $response = $req.GetResponse()
                    $fUri = $response.ResponseUri
                    $filename = [System.IO.Path]::GetFileName($fUri.LocalPath);
                    $response.Close()
                    # download file
                    $destination = (Get-Item -Path "." -Verbose).FullName
                    if ($FolderPath) { $destination = $FolderPath }
                    if ($destination.EndsWith('')) {
                    $destination += $filename
                    } else {
                    $destination += '' + $filename
                    }
                    $webclient = New-Object System.Net.webclient
                    $webclient.downloadfile($fUri.AbsoluteUri, $destination)
                    write-host -ForegroundColor DarkGreen "downloaded '$($fUri.AbsoluteUri)' to '$($destination)'"
                    } catch {
                    write-host -ForegroundColor DarkRed $_.Exception.Message
                    }
                    }
                    }


                    Use it like this to download the file to the current folder:



                    Get-FileFromUri http://example.com/url/of/example/file  


                    Or to download the file to a specified folder:



                    Get-FileFromUri http://example.com/url/of/example/file  C:example-folder  






                    share|improve this answer














                    share|improve this answer



                    share|improve this answer








                    edited Apr 24 '15 at 19:42









                    Nathan Rice

                    25227




                    25227










                    answered Aug 12 '14 at 10:48









                    user25986

                    1414




                    1414






















                        up vote
                        2
                        down vote













                        The following function will get a URL.



                        function Get-URLContent ($url, $path) {
                        if (!$path) {
                        $path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
                        }
                        $wc = New-Object Net.WebClient
                        $wc.UseDefaultCredentials = $true
                        $wc.Proxy.Credentials = $wc.Credentials
                        $wc.DownloadFile($url, $path)
                        }


                        Some comments:




                        1. The last 4 lines are only needed if you are behind an authenticating proxy. For simple use, (New-Object Net.WebClient).DownloadFile($url, $path) works fine.

                        2. The path must be absolute, as the download is not done in your current directory, so relative paths will result in the download getting lost somewhere.

                        3. The if (!$path) {...} section handles the simple case where you just want to download the file to the current directory using the name given in the URL.






                        share|improve this answer

























                          up vote
                          2
                          down vote













                          The following function will get a URL.



                          function Get-URLContent ($url, $path) {
                          if (!$path) {
                          $path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
                          }
                          $wc = New-Object Net.WebClient
                          $wc.UseDefaultCredentials = $true
                          $wc.Proxy.Credentials = $wc.Credentials
                          $wc.DownloadFile($url, $path)
                          }


                          Some comments:




                          1. The last 4 lines are only needed if you are behind an authenticating proxy. For simple use, (New-Object Net.WebClient).DownloadFile($url, $path) works fine.

                          2. The path must be absolute, as the download is not done in your current directory, so relative paths will result in the download getting lost somewhere.

                          3. The if (!$path) {...} section handles the simple case where you just want to download the file to the current directory using the name given in the URL.






                          share|improve this answer























                            up vote
                            2
                            down vote










                            up vote
                            2
                            down vote









                            The following function will get a URL.



                            function Get-URLContent ($url, $path) {
                            if (!$path) {
                            $path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
                            }
                            $wc = New-Object Net.WebClient
                            $wc.UseDefaultCredentials = $true
                            $wc.Proxy.Credentials = $wc.Credentials
                            $wc.DownloadFile($url, $path)
                            }


                            Some comments:




                            1. The last 4 lines are only needed if you are behind an authenticating proxy. For simple use, (New-Object Net.WebClient).DownloadFile($url, $path) works fine.

                            2. The path must be absolute, as the download is not done in your current directory, so relative paths will result in the download getting lost somewhere.

                            3. The if (!$path) {...} section handles the simple case where you just want to download the file to the current directory using the name given in the URL.






                            share|improve this answer












                            The following function will get a URL.



                            function Get-URLContent ($url, $path) {
                            if (!$path) {
                            $path = Join-Path $pwd.Path ([URI]$url).Segments[-1]
                            }
                            $wc = New-Object Net.WebClient
                            $wc.UseDefaultCredentials = $true
                            $wc.Proxy.Credentials = $wc.Credentials
                            $wc.DownloadFile($url, $path)
                            }


                            Some comments:




                            1. The last 4 lines are only needed if you are behind an authenticating proxy. For simple use, (New-Object Net.WebClient).DownloadFile($url, $path) works fine.

                            2. The path must be absolute, as the download is not done in your current directory, so relative paths will result in the download getting lost somewhere.

                            3. The if (!$path) {...} section handles the simple case where you just want to download the file to the current directory using the name given in the URL.







                            share|improve this answer












                            share|improve this answer



                            share|improve this answer










                            answered Dec 15 '14 at 15:26









                            Paul Moore

                            338148




                            338148






















                                up vote
                                1
                                down vote













                                Use Windows 10 bash shell which includes wget once the windows feature is setup.



                                How to install Ubuntu bash shell on Windows:



                                YouTube: Running Bash on Ubuntu on Windows!



                                Windows Subsystem for Linux Documentation






                                share|improve this answer



















                                • 1




                                  Consider adding some quoted reference to this answer supporting what you state in case the link ever dies so the answer content is still available that is currently only available via that link per your suggestion.
                                  – Pimp Juice IT
                                  Sep 27 '17 at 3:36















                                up vote
                                1
                                down vote













                                Use Windows 10 bash shell which includes wget once the windows feature is setup.



                                How to install Ubuntu bash shell on Windows:



                                YouTube: Running Bash on Ubuntu on Windows!



                                Windows Subsystem for Linux Documentation






                                share|improve this answer



















                                • 1




                                  Consider adding some quoted reference to this answer supporting what you state in case the link ever dies so the answer content is still available that is currently only available via that link per your suggestion.
                                  – Pimp Juice IT
                                  Sep 27 '17 at 3:36













                                up vote
                                1
                                down vote










                                up vote
                                1
                                down vote









                                Use Windows 10 bash shell which includes wget once the windows feature is setup.



                                How to install Ubuntu bash shell on Windows:



                                YouTube: Running Bash on Ubuntu on Windows!



                                Windows Subsystem for Linux Documentation






                                share|improve this answer














                                Use Windows 10 bash shell which includes wget once the windows feature is setup.



                                How to install Ubuntu bash shell on Windows:



                                YouTube: Running Bash on Ubuntu on Windows!



                                Windows Subsystem for Linux Documentation







                                share|improve this answer














                                share|improve this answer



                                share|improve this answer








                                edited Jan 12 at 10:08









                                TamusJRoyce

                                1033




                                1033










                                answered Sep 27 '17 at 3:21









                                Miloud Eloumri

                                1112




                                1112








                                • 1




                                  Consider adding some quoted reference to this answer supporting what you state in case the link ever dies so the answer content is still available that is currently only available via that link per your suggestion.
                                  – Pimp Juice IT
                                  Sep 27 '17 at 3:36














                                • 1




                                  Consider adding some quoted reference to this answer supporting what you state in case the link ever dies so the answer content is still available that is currently only available via that link per your suggestion.
                                  – Pimp Juice IT
                                  Sep 27 '17 at 3:36








                                1




                                1




                                Consider adding some quoted reference to this answer supporting what you state in case the link ever dies so the answer content is still available that is currently only available via that link per your suggestion.
                                – Pimp Juice IT
                                Sep 27 '17 at 3:36




                                Consider adding some quoted reference to this answer supporting what you state in case the link ever dies so the answer content is still available that is currently only available via that link per your suggestion.
                                – Pimp Juice IT
                                Sep 27 '17 at 3:36










                                up vote
                                -1
                                down vote













                                Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"



                                Note: -outfile parameter expects a string, so if your filename starts with a number, and not enclosed in quotes, no output file is created.



                                This does not affect filenames starting with a letter.






                                share|improve this answer





















                                • This solution is mentioned in other answers (wget is an alias of Invoke-WebRequest, and one similar to the above)
                                  – bertieb
                                  Nov 27 at 18:27












                                • The point of the answer was to emphasise the note. None of the answers deal with no file being created due to the syntax error.
                                  – zimba
                                  Nov 28 at 10:28










                                • That should really be a comment on the other answer[s]
                                  – bertieb
                                  Nov 28 at 13:02















                                up vote
                                -1
                                down vote













                                Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"



                                Note: -outfile parameter expects a string, so if your filename starts with a number, and not enclosed in quotes, no output file is created.



                                This does not affect filenames starting with a letter.






                                share|improve this answer





















                                • This solution is mentioned in other answers (wget is an alias of Invoke-WebRequest, and one similar to the above)
                                  – bertieb
                                  Nov 27 at 18:27












                                • The point of the answer was to emphasise the note. None of the answers deal with no file being created due to the syntax error.
                                  – zimba
                                  Nov 28 at 10:28










                                • That should really be a comment on the other answer[s]
                                  – bertieb
                                  Nov 28 at 13:02













                                up vote
                                -1
                                down vote










                                up vote
                                -1
                                down vote









                                Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"



                                Note: -outfile parameter expects a string, so if your filename starts with a number, and not enclosed in quotes, no output file is created.



                                This does not affect filenames starting with a letter.






                                share|improve this answer












                                Invoke-WebRequest -Uri "http://www.google.com/" -outfile "2.pdf"



                                Note: -outfile parameter expects a string, so if your filename starts with a number, and not enclosed in quotes, no output file is created.



                                This does not affect filenames starting with a letter.







                                share|improve this answer












                                share|improve this answer



                                share|improve this answer










                                answered Nov 27 at 18:05









                                zimba

                                142




                                142












                                • This solution is mentioned in other answers (wget is an alias of Invoke-WebRequest, and one similar to the above)
                                  – bertieb
                                  Nov 27 at 18:27












                                • The point of the answer was to emphasise the note. None of the answers deal with no file being created due to the syntax error.
                                  – zimba
                                  Nov 28 at 10:28










                                • That should really be a comment on the other answer[s]
                                  – bertieb
                                  Nov 28 at 13:02


















                                • This solution is mentioned in other answers (wget is an alias of Invoke-WebRequest, and one similar to the above)
                                  – bertieb
                                  Nov 27 at 18:27












                                • The point of the answer was to emphasise the note. None of the answers deal with no file being created due to the syntax error.
                                  – zimba
                                  Nov 28 at 10:28










                                • That should really be a comment on the other answer[s]
                                  – bertieb
                                  Nov 28 at 13:02
















                                This solution is mentioned in other answers (wget is an alias of Invoke-WebRequest, and one similar to the above)
                                – bertieb
                                Nov 27 at 18:27






                                This solution is mentioned in other answers (wget is an alias of Invoke-WebRequest, and one similar to the above)
                                – bertieb
                                Nov 27 at 18:27














                                The point of the answer was to emphasise the note. None of the answers deal with no file being created due to the syntax error.
                                – zimba
                                Nov 28 at 10:28




                                The point of the answer was to emphasise the note. None of the answers deal with no file being created due to the syntax error.
                                – zimba
                                Nov 28 at 10:28












                                That should really be a comment on the other answer[s]
                                – bertieb
                                Nov 28 at 13:02




                                That should really be a comment on the other answer[s]
                                – bertieb
                                Nov 28 at 13:02


















                                draft saved

                                draft discarded




















































                                Thanks for contributing an answer to Super User!


                                • Please be sure to answer the question. Provide details and share your research!

                                But avoid



                                • Asking for help, clarification, or responding to other answers.

                                • Making statements based on opinion; back them up with references or personal experience.


                                To learn more, see our tips on writing great answers.





                                Some of your past answers have not been well-received, and you're in danger of being blocked from answering.


                                Please pay close attention to the following guidance:


                                • Please be sure to answer the question. Provide details and share your research!

                                But avoid



                                • Asking for help, clarification, or responding to other answers.

                                • Making statements based on opinion; back them up with references or personal experience.


                                To learn more, see our tips on writing great answers.




                                draft saved


                                draft discarded














                                StackExchange.ready(
                                function () {
                                StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fsuperuser.com%2fquestions%2f362152%2fnative-alternative-to-wget-in-windows-powershell%23new-answer', 'question_page');
                                }
                                );

                                Post as a guest















                                Required, but never shown





















































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown

































                                Required, but never shown














                                Required, but never shown












                                Required, but never shown







                                Required, but never shown







                                Popular posts from this blog

                                Plaza Victoria

                                In PowerPoint, is there a keyboard shortcut for bulleted / numbered list?

                                How to put 3 figures in Latex with 2 figures side by side and 1 below these side by side images but in...