How do I save a pdf file using Powershell?

This topic contains 0 replies, has 1 voice, and was last updated by  Forums Archives 5 years, 7 months ago.

  • Author
    Posts
  • #5388

    by karmista at 2013-01-01 05:54:00

    Using the below IE Application object, I am logging into a http website by providing username and password & attempting to download pdf files.
    new-object -com InternetExplorer.Application

    I have over a million files that needs to be downloaded.

    Currently, I get a "Find/ Save/ Cancel" prompt.

    How do I save the pdf file without getting this prompt?
    If the prompt cannot be avoided, there should be some way I can programatically press the save button & provide a name and save the file.
    (Sendkeys method did not work well)

    Attempted Browsers: IE 8 & IE 9

    $wshell = New-Object -ComObject WScript.Shell
    $id = (gps iexplore* | where {$_.MainWindowTitle -match "MyProg"}).id
    Write-host $id
    $wshell.AppActivate($id)
    start-sleep -milliseconds 100;
    $wshell.SendKeys("%{S}");

    by DonJ at 2013-01-01 09:22:06

    Not using PowerShell. Besides the fact that you're going through several layers to get to that COM object, it just isn't what PowerShell's designed for. If you *had* to do this with IE, I'd consider exploring AutoIt, or something else designed for that. PowerShell would want you to go down a more programmatic approach and not use IE at all. You'd create a WebRequest, feed it the URL, get the response back as a binary stream, and then write that binary stream to a file. It's a bit more complicated from a programming perspective, but it's more reliable. IE's goofy.

    http://www.codeguru.com/columns/dotnett ... lasses.htm has the basic methodology, although the code is in C# and you'd need to translate. You can also do some searching for "powershell curl" and "powershell wget" – folks have solved this before in various ways. v3 has Invoke-WebRequest, which may shortcut the process a bit if you're using v3.

    by karmista at 2013-01-02 04:52:34

    Thanks Donj!

    Will explore Invoke-WebRequest

    The C# code looks puzzling as I'm a windows server admin. PowerShell comes in naturally. 🙂

    Using powershell, I had almost got to the point where I get a save prompt. Thought if I can just get that working, it'd be perfect.
    Yes, I can use PowerShell V3 to take the advantage of its workflows as well.

    by karmista at 2013-01-02 05:04:51

    If I had a clear cut download url without any login required, I could have used the below System.Net.WebClient object.

    PS > $source = "http://www.leeholmes.com/favicon.ico"
    PS > $destination = "c:\temp\favicon.ico"
    PS >
    PS > $wc = New-Object System.Net.WebClient
    PS > $wc.DownloadFile($source, $destination)

    Source: http://answers.oreilly.com/topic/2006-h ... owershell/

    However, my scenario is:

    1) Login to a website via providing credentials in the application i.e. within the username/password text box.
    2) Post a url
    EG: http://10.12.1.12/myapp/myfile.aspx?docid=49000
    3) A standard pdf file gets generated i.e. myfile.pdf when I send this request from an authenticated IE browser session.
    4) Save this pdf

    5) Rename it to 49000.pdf [Here, 49000 is the doc id.]
    6) Repeat steps 2 to 5 a million times to download all the docs.

You must be logged in to reply to this topic.