Вызов приложения командной строки для вывода в stderr с помощью конвейера - PullRequest
1 голос
/ 12 апреля 2019

Я хочу получить потоки как std-err, так и std-out из двоичного файла, который я вызвал с помощью powershell, переданного в командлет powershell. Я не могу понять синтаксис или найти правильную команду.

У меня есть небольшой Write-Smartly командлет, который я хочу обрабатывать построчно из комбинированной стандартной ошибки и стандартного вывода. Сама оболочка на Write-Host сама по себе добавляет отступ.

Моя первая попытка, я хочу:

  • используйте -ErrorAction, чтобы указать powershell не обрабатывать стандартные сообщения об ошибках как исключения
  • используйте 2>&1 для объединения потоков со стандартной ошибкой и стандартным выводом в конвейерный вывод
  • используйте ... | MyCmdlet для форматирования объединенных потоков вывода и ошибок до их окончательного вывода

давая мне:

& $myApp $args --% -ErrorAction 'SilentlyContinue' 2>&1 | Write-Smartly

К сожалению, это закончилось передачей -ErrorAction SilentlyContinue и 2>&1 в мое приложение в качестве аргументов. Стандартная ошибка отображалась как обычный вывод, но она была записана непосредственно на хост, а не передана в WriteSmartly.

Поэтому я сделал несколько модификаций, чтобы попытаться исправить это:

$ErrorActionPreference = 'SilentlyContinue'
&{ & $myApp $args } 2>&1 | Write-Smartly

Это просто приводит к исчезновению вывода моей ошибки.

Я также поиграл с Start-Process, но он кажется слишком тяжелым, чтобы позволить мне вытащить вещи из трубы. Я думаю, что Invoke-Command или Invoke-Expression могут быть полезны здесь, но я не уверен, каковы их варианты использования.

Как записать как стандартную ошибку, так и стандартный вывод в виде конвейерного значения в powershell?

...