Jam*_*all 3 powershell redirect stdout stderr
如何重定向
我看过的事情:
>>并且2>>只能重定向到文件.
-RedirectStandardOutput并且-RedirectStandardError只能再次重定向到文件.
| Out-File无法重定向stderr.
| Tee-Object同样的问题.
全面的解释在MSDN的about_Redirection文章中。
一个最小、完整且可验证的示例(stdout用于管道):
PS D:\PShell> -1,5,0,2| ForEach-Object { 15/$_ } 2>"$env:temp\err.txt" | Write-Output
-15
3
7.5
PS D:\PShell> Get-Content "$env:temp\err.txt"
Attempted to divide by zero.
At line:1 char:28
+ -1,5,0,2| ForEach-Object { 15/$_ } 2>"$env:temp\err.txt" | Write-Outpu ...
+ ~~~~~
+ CategoryInfo : NotSpecified: (:) [], RuntimeException
+ FullyQualifiedErrorId : RuntimeException
PS D:\PShell>
Run Code Online (Sandbox Code Playgroud)
另一个例子(stdout反对):
PS D:\PShell> $x = -1,5,0,2| ForEach-Object { 15/$_} 2>"$env:temp\err.txt"
PS D:\PShell> $x
-15
3
7.5
Run Code Online (Sandbox Code Playgroud)
加入stdout和stderr输出流的工作方式与PetSerAl一样,虽然语法不是最直观的.
奇怪的语法2>&1意味着stderr(流2)将被添加到stdout(流1)中.由于这实际上并不是您所追求的,请尝试将MS页面中的其他示例调整为Powershell:
或者,您可以将输出重定向到一个位置,将错误重定向到另一个位置.
dir file.xxx> output.msg 2> output.err
从而,
$ret = myCommand 2> errors.log
Run Code Online (Sandbox Code Playgroud)
应该在日志文件中发送错误并在$ret变量中发送非错误.
| 归档时间: |
|
| 查看次数: |
2513 次 |
| 最近记录: |