Author Posts

January 1, 2012 at 12:00 am

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.