Powershell:如何将stdout和stderr分别重定向到文件和控制台

时间:2019-07-08 03:30:13

标签: powershell stderr io-redirection tee

如何在PowerShell中将stdout和stderr分别重定向到文件和控制台

浏览所有站点,我发现基本上有两种方法,但是完全可以满足要求

  1. & .\test.ps1 2>&1 | tee .\out.txt

在这种情况下,stdout和stderr仍可以显示在控制台上,但是它们将合并在同一文件中

  1. & .\test.ps1 2>error.txt | tee out.txt

这是我从SilverNak看到的解决方法。但是,正如他所说,stderr将不会显示在控制台上

1 个答案:

答案 0 :(得分:1)

要在控制台中同时显示成功输出和错误流输出并将其捕获到特定于流的文件中,需要进行额外的工作:

# Create / truncate the output files
$null > out.txt
$null > error.txt

# Call the script and merge its output and error streams.
& .\test.ps1 2>&1 | ForEach-Object {
  # Pass the input object through (to the console). 
  $_
  # Also send the input object to the stream-specific output file.
  if ($_ -is [System.Management.Automation.ErrorRecord]) { $_ >> error.txt }
  else                                                   { $_ >> out.txt }
}