Powershell: как перенаправить stdout и stderr в файл и консоль отдельно - PullRequest
2 голосов
/ 08 июля 2019

Как перенаправить stdout и stderr в файл и консоль отдельно в PowerShell?

Пройдя по всем сайтам, я обнаружил, что в основном есть два метода, но НИ ОДИН не может полностью удовлетворить требование

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

В этом случае stdout и stderr могут по-прежнему отображаться на консоли, но они будут объединены в одном файле

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

Это обходной путь, который я видел от SilverNak .Однако, по его словам, stderr не будет отображаться на консоли

1 Ответ

1 голос
/ 08 июля 2019

Чтобы отобразить как успешный вывод, так и вывод потока ошибок в консоли и захватить его в специфичные для потока файлы, требуется дополнительная работа:

# 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 }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...