使用管道调用输出到stderr的命令行应用程序

时间:2019-04-12 08:13:59

标签: shell powershell standard-error

我正在寻找从Powershell调用的二进制文件中获取std-err和std-out流,这些二进制文件通过powershell通过管道传输到powershell cmdlet。我似乎无法获取语法或找到正确的命令。

我有一个小Write-Smartly cmdlet,我想逐行处理组合的标准错误和标准输出。它本身就是Write-Host上的包装器,它增加了一些缩进。

我的第一次尝试,我想:

  • 使用-ErrorAction表示Powershell不将标准错误消息视为异常
  • 使用2>&1将标准错误流和标准输出流组合为可流水线输出
  • 使用... | MyCmdlet将合并的输出和错误流格式化为其最终输出

给我:

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

不幸的是,这最终将-ErrorAction SilentlyContinue2>&1作为参数传递给我的应用程序。标准错误确实显示为常规输出,但它直接写入主机,而不是通过管道传递到WriteSmartly

因此,我进行了一些修改以尝试纠正此问题:

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

这只会导致我的错误输出消失。

我也玩过Start-Process,但似乎太沉重了,无法让我用烟斗把东西弄出来。我认为Invoke-CommandInvoke-Expression在这里可能会有所帮助,但我不确定它们的用例是什么。

如何在Powershell中将标准错误和标准输出捕获为流水线值?

0 个答案:

没有答案