How to capture output in a variable rather than a logfile?

This would write the output to a logfile:

& $Env:WinDir\system32\inetsrv\appcmd.exe >test.log

But what if I wanted to keep the output in a string variable to use it in the email body?

I tried this without any luck..

$test = ""
& $Env:WinDir\system32\inetsrv\appcmd.exe >$test

Write-Host $test

You have to do:

$test = & $Env:WinDir\system32\inetsrv\appcmd.exe

If you wanted to redirect error as well, add 2>&1 in the end.


Capturing the output of a executable is as simple as,

$cmdOutput = &"Application.exe" 2>&1

2>&1 - Includes the error stream in the output

Return type of the executable in PowerShell is an array of strings. In case of logging such outputs,

Write-Host $cmdOutput

will output the strings in the array to the output stream separated by spaces

To print them in a string per line fashion, choose

Write-Output $cmdOutput

or

$cmdOutput = &"Application.exe" | Out-String
Write-Host $cmdOutput