11

In a Powershell script, I something like this:

Invoke-Expression "& `"C:\Scripts\psftp.exe`" ftp.blah.com"

I want to pipe all output, errors etc of this to the string $output

How can I do this? I've tried > at the end as well as $output = ... but neither seem to catch errors and the sort.

1 Answer 1

15

Try this:

$output = Invoke-Expression "C:\Scripts\psftp.exe ftp.blah.com 2>&1"

The use of the call operator & is unnecessary as is quoting the exe path in this case since the path doesn't contain spaces. If the path contained spaces, then it would need to be quoted and then you would have to use the call operator. That said, I'm not sure why you need to use Invoke-Expression at all in this case. The following would work just as well given your example.

$output = C:\Scripts\psftp.exe ftp.blah.com 2>&1
Sign up to request clarification or add additional context in comments.

6 Comments

I won't be touching the command prompt (it'll be automated), how can I do this within the script?
That is script. Anything you type at the command prompt can be dropped into a script and executed i.e. automated. The only exception I can think of are commands that require user input like Read-Host. Does executing the psftp.exe in this fashion prompt for input?
I'll add that this will typically return an array of strings; if you want all of the output captured as a single string, append "| Out-String" onto the end of the command.
I get an error. Illegal character in path! My Path has spaces, so I have all in double qutoes
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.