【问题标题】:Powershell: Out-FilePowershell:输出文件
【发布时间】:2013-06-15 05:24:51
【问题描述】:

我正在尝试将所有控制台输出记录到文件中。 移动项目 D:\scripts\fileA D:\scripts\fileB -verbose -Force |输出文件 D:\scripts\move.log -Append

如果文件不存在,则正在创建该文件。 但是该文件中不存在详细信息和最终的 powershell 错误。 我怎样才能得到这些信息?

【问题讨论】:

    标签: powershell


    【解决方案1】:

    管道仅捕获成功输出流,而不捕获错误和详细流。要捕获后者,您需要将其重定向到前者:

    Move-Item "D:\scripts\fileA" "D:\scripts\fileB" -Verbose -Force 2>&1 4>&1 |
      Out-File D:\scripts\move.log -Append

    更多信息请参见Get-Help about_Redirection

    【讨论】:

    • 只是为了补充 Ansgar 所说的,这是 *nix 和 Windows 系统处理输出的方式;一个输出流和一个错误流。立即输出错误流,以便在即将发生崩溃的情况下输出尽可能多的数据(毕竟它是诊断性的,允许收集日志或其他任何东西并对问题进行分类);而标准输出流的响应速度不快。所以如果你想要两者,你必须告诉它把文件描述符 2 (stderr) 发送到与文件描述符 1 (stdout) 相同的地方。顺便说一句,FD 3 是标准输入。
    • 还有一些流,例如警告和详细消息。这些可以从 PowerShell 中重定向,但不会作为单独的流向外界显示。
    • @ash Stdin 为 FD 0。文件描述符 3-9 用于 Unix shellsCMD 中的其他文件/输出流。在 PowerShell 中,流 3 用于重定向警告,4 用于详细,5 用于调试输出。
    • @AnsgarWiechers 哎呀,我的意思是 FD 0 用于标准输入,感谢您了解这一点。另外,感谢其他 FD,我不知道其中一些。
    猜你喜欢
    • 2020-01-15
    • 2013-01-22
    • 2021-11-25
    • 1970-01-01
    • 1970-01-01
    • 2020-07-02
    • 2014-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多