running PowerShell's Invoke-Item with a switch

2

2

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?

Kieran Walsh

Posted 2011-05-15T08:51:36.513

Reputation: 279

Answers

1

Use Invoke-Expression :

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

zdan

Posted 2011-05-15T08:51:36.513

Reputation: 2 732

1

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.

Kieran Walsh

Posted 2011-05-15T08:51:36.513

Reputation: 279