PHPFixing
  • Privacy Policy
  • TOS
  • Ask Question
  • Contact Us
  • Home
  • PHP
  • Programming
  • SQL Injection
  • Web3.0

Sunday, July 17, 2022

[FIXED] How to separate warning message from stdout/result in powershell redirection?

 July 17, 2022     batch-processing, cmd, powershell, stdout, warnings     No comments   

Issue

I'm trying to write a simple test script in PowerShell to separate warning message from stdout/result in order to get two separate text files, one for warnings and one for standard results in PowerShell Redirection.

Here is my simple output.ps1 script:

Write-Output "This is result"
Write-Warning "This is warning"

I'm trying to run output.ps1 using a .bat file using below command:

PowerShell.exe -Command "& '%~dp0output.ps1'" 3>warning.txt >results.txt
pause

But my problem is warning.txt is completely empty, while both – warning and result – are written to results.txt.

This is result
WARNING: This is warning

What I am missing in PowerShell.exe -Command "& '%~dp0output.ps1'" 3>warning.txt >results.txt to separate warnings and errors into two files?


Edit: Modified to see standard error, 2> is working.

Even if I redirect standard error to separate file using 2>error.txt by using

PowerShell.exe -Command "& '%~dp0output.ps1'" 2>error.txt 3>warning.txt >results.txt

and if I modify output.ps1 to generate an error in the following manner

Write-Output "This is result"
Write-Warning "This is warning""
This will generate error because this is not a ps command.

it will generate the error as expected to a file error.txt with results.txt where results.txt is the combination of warning and stdout/result. warning.txt is still empty. I still can't figure out why PowerShell warnings are not filtered and redirected properly to a separate file.

error.txt:

this : The term 'this' is not recognized as the name of a cmdlet, function,
script file, or operable program. Check the spelling of the name, or if a path
was included, verify that the path is correct and try again.
At C:\Users\Dell\Desktop\output.ps1:3 char:1
+ This will generate error because this is not a ps command.
+ ~~~~
    + CategoryInfo          : ObjectNotFound: (this:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

results.txt:

This is result
WARNING: This is warning

I'm using Windows 10 and PowerShell Version 5.1.14393.1358.


Solution

Real problem, in the below example, is, When you use powershell.exe to execute a ps1 file verbose, warning, and debug streams are merged into STDOUT) -Source. (---resulting a blank warning.txt)

    PowerShell.exe -Command "& '%~dp0output.ps1'" 3>warning.txt >results.txt  

To circumvent this limitation in powershell.exe, there is a workaround for above example using extra intermediate ps1 file. You can use two powershell files and a bat file and get three separate files for error/warning/results. (2>error.txt 3>warning.txt >results.txt)

Have the same content for output.ps1 with below content.

Write-Output "This is result"
Write-Warning "This is warning""
This will generate error because this is not a ps command.

Then create another powershell file. (I will call it newout.ps1) and newout.ps1 can run output.ps1 with below content.

.\output.ps1 2>error.txt 3>warning.txt >results.txt

Finally your bat file can run newout.ps11 instead of output.ps1 in this manner.

PowerShell.exe -Command "& '%~dp0newout.ps1'"

Which gives you three separate files with desired results.



Answered By - Aravinda
Answer Checked By - Marie Seifert (PHPFixing Admin)
  • Share This:  
  •  Facebook
  •  Twitter
  •  Stumble
  •  Digg
Newer Post Older Post Home
View mobile version

0 Comments:

Post a Comment

Note: Only a member of this blog may post a comment.

Total Pageviews

Featured Post

Why Learn PHP Programming

Why Learn PHP Programming A widely-used open source scripting language PHP is one of the most popular programming languages in the world. It...

Subscribe To

Posts
Atom
Posts
Comments
Atom
Comments

Copyright © PHPFixing