Powershell - "open with" equal

I have several XML files that are encrypted and require opening with a specific application.  I would like to use powershell to:

1. open the file in the specific application
2. save the file as txt or xml
3. parse the file using XML controls.

I will address step 3 later.  1 and 2 is where I could use some help. Is there a switch or bar I could add to a get cmdlet to specify an application to access a file with?

The application I need to use is not an installed app.  It is a single exe file.
LVL 11
chadAsked:
Who is Participating?
 
soostibiConnect With a Mentor Commented:
Let's assume, that your specific application is notepad.exe. You can open a file from PowerShell:
$sh = new-object -com wscript.shell
$sh.Run("notepad c:\ee\10.txt")

(it might not work for you app, but you have to test it. You could also open it by:
notepad c:\ee\10.txt
but we have to further control the app, see below.)

To save it, it's a bit harder to do. But it might work like this with the help of the wscript.shell com object and sending keys to the app:

$sh.AppActivate("notepad")
$sh.SendKeys("%(F)A")                   # send Alt+F and A to notepad to open the Send As dialog
start-sleep 1                              # give time for the dialog to open
$sh.SendKeys("abcdefghijk.txt")      # send a filename to Save As dialog
start-sleep 1                              # wait till the characters are entered
$sh.SendKeys("~")                        # send an Enter
0
 
chadAuthor Commented:
wow, that is insanely closer to what I need than I thought I would get.  One additional request if you can?

in the save as dialog box I would like to change the default file type to txt.

the above works great...thanks
0
 
chadAuthor Commented:
Okay, I am almost there.  I added these two lines and it almost works but 1 flaw.
the Alt-f is applied to the window with focus.  Once the app opens it loses focus to the script.

$sh.AppActivate($applicationName)
$sh.SendKeys("%(F)A")                   # send Alt+F and A to notepad to open the Send As dialog
start-sleep 1                              # give time for the dialog to open
$sh.SendKeys("$newFile")      # send a filename to Save As dialog
$sh.SendKeys("{tab}")
$sh.SendKeys("t")
start-sleep 1                              # wait till the characters are entered
$sh.SendKeys("~")                        # send an Enter

thanks a bunch
0
 
chadAuthor Commented:
ahh.. figured it out.  
First up was the fact that my app doesn't like the use of atl-F shortcut.  So what I did was :
send Alt
send down
send down
send down
send down
send enter

this still did not allow focus on the correct app and I found that was due to the application was not fully awake yet so I put in a two second sleep.

Thank you for the code and especially for adding the comments so it was easy for me to figure out and to experiment on.



$sh = new-object -com wscript.shell

$sh.Run("$applicationName $filename")                           #open application with specific file
start-sleep 1                                                   #give time for application to open
$sh.AppActivate($strApplicationName);$sh.SendKeys("%")          #sends an ALT key press
$sh.AppActivate($strApplicationName);$sh.SendKeys("{DOWN}")     #sends a Down arrow key press 
$sh.AppActivate($strApplicationName);$sh.SendKeys("{DOWN}")     #sends a Down arrow key press              
$sh.AppActivate($strApplicationName);$sh.SendKeys("{DOWN}")     #sends a Down arrow key press 
$sh.AppActivate($strApplicationName);$sh.SendKeys("{DOWN}")     #sends a Down arrow key press 
$sh.AppActivate($strApplicationName);$sh.SendKeys("~")          #sends an Enter key press 
start-sleep 1                                                   #give time for the dialog to open
$sh.AppActivate($strApplicationName);$sh.SendKeys("$newFile")   #send a filename to Save As dialog
$sh.AppActivate($strApplicationName);$sh.SendKeys("{tab}")      #sends a Tab key press 
$sh.AppActivate($strApplicationName);$sh.SendKeys("t")          #sends an "T" key press 
start-sleep 1                                                   #wait till the characters are entered
$sh.SendKeys("~")                                               #send an Enter

Open in new window

0
 
chadAuthor Commented:
for those that found this question on a search check out this link for many more sendkeys options
http://technet.microsoft.com/en-us/library/ff731008.aspx
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

All Courses

From novice to tech pro — start learning today.