【问题标题】:which stream does out-file record in powershell?哪个流在powershell中记录输出文件?
【发布时间】:2021-12-18 17:35:38
【问题描述】:

默认情况下,out-file 记录流 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

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

【问题讨论】:

标签: powershell io-redirection


【解决方案1】:

您正在使用 管道 (|) 向 Out-File 提供输入。

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

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

你可以合并:

  • 个人个流按他们的数量;例如3>&1warning 流 (3) 合并到成功流中; 多个可以使用这样的重定向。

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

由于您使用的是*>&1,来自所有流的输出通过管道发送,因此Out-File保存到目标文件


顺便说一句:>redirection operator(连同>>)是Out-File 的有效别名,所以你可以使用它单独保存到文件 - 假设Out-File默认字符编码是可以接受的:[1]

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

使用> 定位文件还允许您将单个流保存到单独文件

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

[1] 在 PowerShell 5.1 及更高版本中,您可以通过preference variable $PSDefaultParameterValues 更改Out-File 的默认编码方式,该方式也对> 生效 - 请参阅this answer。支持>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    • 2020-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-22
    相关资源
    最近更新 更多