I'm trying to make a PowerShell script to launch programs after I boot up my machine. I'm taking things out of the registry's "run" area and putting them in the script in the order that I want and after inserting some delays for items that are not important to run immediately. This is the code to start Outlook for instance:

# Outlook
Start-Sleep -s 10
Invoke-Item "c:\Program Files (x86)\Microsoft Office\Office14\OUTLOOK.EXE"

That works for paths that do not have a switch, but I can't get it to work if there is a switch involved. For example this is the launch command for Windows Live Messenger:

c:\Program Files (x86)\Windows Live\Messenger\msnmsgr.exe /background

So the spaces also cause some problems. I've tried this:

#Start-Sleep -s 10
$test= {"c:\Program Files (x86)\Windows Live\Messenger\msnmsgr.exe"}
Invoke-Item $test /background

but that doesn't work either.

Any ideas?

link|improve this question
feedback

2 Answers

up vote 0 down vote accepted

Use Invoke-Expression :

#Start-Sleep -s 10
$test= "c:\Program Files (x86)\Windows Live\Messenger\msnmsgr.exe /background"
Invoke-Expression $test 
link|improve this answer
feedback

Hi someone on Twitter helped me find the solution.

I don't need the Invoke-Item command at all and I did try without it at first, but starting with an ampersand worked. So, my line should have been:

& 'c:\Program Files (x86)\Windows Live\Messenger\msnmsgr.exe' /background

Hope that helps someone else in future as I couldn't find much online.

link|improve this answer
feedback

Your Answer

 
or
required, but never shown

Not the answer you're looking for? Browse other questions tagged or ask your own question.