Tee-Object -Variable不发送到stdout

时间:2017-11-28 02:55:57

标签: powershell tee

我有一段脚本,其中包含以下行:

myBinary.exe --param1 a -param2 b | Tee-Object -Variable "myVar"

它用于流式传输输出就好了。现在我将此行移动到一个函数中,它不再流入标准输出并仅填充变量myVar

知道如何解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

我们没有足够的信息来诊断您的问题,但 <{1}}陷阱 可以解释您的症状:

自Windows PowerShell v5.1 / PowerShell Core v6.0.0-rc开始:

如果Tee-Object未通过管道收到任何成功输出,则会保留目标变量之前的或,如果该名称没有预先存在的变量,创建它。

Tee-Object

这种不直观的行为一直是reported on GitHub

因此,您在# Run command that produces stdout and therefore PS success-stream output. cmd /c 'echo hi' | Tee-Object -Variable myVar # Stdout -> success output was correctly captured in $myVar. $myVar # -> 'hi' # Run another command that *doesn't* produce any stdout output # (only stderr output). cmd /c 'echo NO >&2' | Tee-Object -Variable myVar # !! Perhaps unexpectedly, the previous value of $myVar was NOT cleared. $myVar # -> !! STILL 'hi' 中看到的可能是预先存在的值 - 现在看似非stdout-output-producing - $myVar调用没有清楚。