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?


Use Invoke-Expression :

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

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.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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