Super User is a question and answer site for computer enthusiasts and power users. It's 100% free, no registration required.

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I have a PowerShell script for installing software on remote computers.

To date I have been successfully using the following code:

$prog = "ping"
$arg = "localhost"
$computername = "MACHINE01"
invoke-command -computername $computername {param($p,$a)& $p $a} -ArgumentList $prog,$arg

I now need to install an MSI, Eg. 'msiexec /i c:\file.msi /passive'.

I cannot get MSIEXEC to treat everything after 'MSIEXEC' as parameters. Instead, PowerShell just tries to execute it as one big command. I have had tried numerous things mostly involving the placement of literal quotes but cannot get this to work.

I have now abandoned the call operator (&) in favour of 'Start-Process' which has an '-ArgumentList' parameter. The MSI now executes correctly. Great!

invoke-command -computername $computername {param($p,$a) start-process $p -argumentlist $a -nonewwindow -wait -redirectstandardoutput c:\output.txt; get-content c:\output.txt} -ArgumentList $prog,$arg

The problem with 'Start-Process' is that it does not produce any console output when run remotely using 'Invoke-Command'. I have had to resort to redirecting the output to a file and then reading the file. Is there a better way?

share|improve this question

I would try piping it to the tee-object cmdlet, then saving your file there if needbe (I don't know if sending the file output to $null would work, too bad this isn't linux and we could send it to /dev/null, but I digress)

This is the tee-object cmdlet

invoke-command -computername $computername {param($p,$a) start-process $p -argumentlist $a -nonewwindow -wait | tee-object -file c:\output.txt} -ArgumentList $prog,$arg

that's untested code, but that's generally what you would want.

invoke-command -computername $computername {param($p,$a) start-process $p -argumentlist $a -nonewwindow -wait | tee-object -file $null} -ArgumentList $prog,$arg

might work as well.

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

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