I am writing a PowerShell script where in I need to capture the error message that it\'s throwing. Note: according to PowerShell, there is no error and command is executed s
If you get an error message, you need to capture the error stream:
$msg = command 2>&1
or
command 2>error.txt
PowerShell writes its messages to different streams that can be redirected to files for capturing the respective output.
To capture a particular stream in a file you need to redirect the stream number to a file name. For instance
command 2>"C:\path\to\error.log"
would capture all error messages produced by command in the file C:\path\to\error.log. Use 2>> instead of 2> if you want to append to the file instead of overwriting it with each run.
You can also combine other streams with STDOUT to process/redirect all command output:
command >>"C:\path\to\all.log" *>&1
See Get-Help about_Redirection or this Scripting Guy article for more information about streams and redirection.
Things worth of note:
*> redirection was introduced with PowerShell v3, hence it won't work in PowerShell v2 and earlier.Write-Host because they didn't understand what the cmdlet was intended for.