Я хочу получить потоки как 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?