首页 > 解决方案 > 哪个流在powershell中记录输出文件?

问题描述

默认情况下,文件外记​​录流 1 还是流 6?

如果我有一个命令:

invoke-expression $cmd *>&1 | 
       out-file -encoding ASCII -Append FilePath $log

out-file 将哪些流记录到文件中?

1   Success stream  PowerShell 2.0  Write-Output
2   Error stream    PowerShell 2.0  Write-Error
3   Warning stream  PowerShell 3.0  Write-Warning
4   Verbose stream  PowerShell 3.0  Write-Verbose
5   Debug stream    PowerShell 3.0  Write-Debug
6   Information stream  PowerShell 5.0  Write-Information

只是Stream 1吗?还是流 6?我有点困惑,因为大多数 shell 只有 1 和 2,而 powershell 添加了 6,就像 1?

标签: powershellio-redirection

解决方案


您正在使用管道( |) 向Out-File.

只有 stream 1,默认通过管道发送成功(数据)输出流。您引用
的概念about_Redirection帮助主题记录了所有 6 个 PowerShell 流。

可选地 - 正如您所做的那样 -您可以其他流合并到 stream 中1,这也会导致它们的输出被包含在内。

您可以合并:

  • 各个流的数量;例如3>&1,将警告流 ( 3) 合并到成功流中;可以使用多个这样的重定向。

  • 所有(其他)流,由 表示*,即使用*>&1

由于您使用的是,所有*>&1流的输出都通过管道发送,因此由Out-File.


顺便说一句: >重定向运算符(与 一起>>)是 的有效别名Out-File,因此您可以单独使用它来保存到文件- 假设Out-File默认字符编码是可以接受的:[1]

& { 'success'; Write-Warning 'warning' } *> allstreams.txt

定位文件>还允许您将单个流保存到单独的文件中:

& { 'success'; Write-Warning 'warning' } > data.txt 3> warnings.txt

[1] 在 PowerShell 5.1 及更高版本中,您可以通过首选项变量Out-File以同样适用于 的方式更改默认编码- 请参阅此答案>$PSDefaultParameterValues


推荐阅读