我有一段脚本,其中包含以下行:
myBinary.exe --param1 a -param2 b | Tee-Object -Variable "myVar"
它用于流式传输输出就好了。现在我将此行移动到一个函数中,它不再流入标准输出并仅填充变量myVar
。
知道如何解决这个问题吗?
答案 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
调用没有清楚。