我正在寻找从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
SilentlyContinue
和2>&1
作为参数传递给我的应用程序。标准错误确实显示为常规输出,但它直接写入主机,而不是通过管道传递到WriteSmartly
。
因此,我进行了一些修改以尝试纠正此问题:
$ErrorActionPreference = 'SilentlyContinue'
&{ & $myApp $args } 2>&1 | Write-Smartly
这只会导致我的错误输出消失。
我也玩过Start-Process
,但似乎太沉重了,无法让我用烟斗把东西弄出来。我认为Invoke-Command
或Invoke-Expression
在这里可能会有所帮助,但我不确定它们的用例是什么。
如何在Powershell中将标准错误和标准输出捕获为流水线值?