HOWTO · PowerShell

PowerShell 将输出导出到文本文件

本文介绍了将常用命令的 PowerShell 输出导出到文本文件的方法。

本页内容

要将命令显示的输出保存到文本文件,请将输出通过管道传给 Out-File,并指定文件路径,例如 Get-Process | Out-File -FilePath .\processes.txt。如果文件尚不存在,PowerShell 会创建它;如果该路径已有文件,则会替换其内容。需要保留现有文本时,请使用 -Append。下面的示例将演示如何保存所选输出、读取保存的内容,以及如何在文本文件和会话记录之间做出选择。

使用 Out-File 将 PowerShell 输出导出到文本文件

Out-File 接收来自管道的对象,并将其格式化后的表示形式写入文件。因此,当你需要生成易于阅读的文本报告时,它很有用。示例会比较两个内存中的列表、保存差异并读取生成的文件;整个过程不依赖单独的输入文件。

$reference = @('Alpha', 'Beta', 'Gamma')
$difference = @('Alpha', 'Beta', 'Delta')
$outputPath = Join-Path ([System.IO.Path]::GetTempPath()) 'compare-result.txt'

Compare-Object -ReferenceObject $reference -DifferenceObject $difference |
    Out-File -FilePath $outputPath

Get-Content -Path $outputPath

Compare-Object 会比较两个输入集合。它的 SideIndicator 属性会标明每个不同项来自哪个集合:<= 表示该项来自参考集合,=> 表示该项来自差异集合。此处,不同的值是 Gamma 和 Delta。Get-Content 会显示临时路径中保存的文本;将 $outputPath 改为完整路径(例如 C:\Reports\compare-result.txt),即可选择一个长期保留的位置。此示例没有附带实际观察到的输出列表,因此请在你的 PowerShell 版本中运行它,以查看格式化后的表格。

Out-File 写入的是格式化文本,而不是保留管道对象。它的默认编码因 PowerShell 版本而异。如果其他程序需要读取此文件,请通过 -Encoding 指定当前 PowerShell 版本支持、且符合该程序预期的编码。

将输出追加到文本文件

默认情况下,写入已存在的路径会替换文件内容。添加 -Append 可保留现有文本,并将新的命令输出追加到末尾。例如,Get-Date | Out-File -FilePath .\log.txt -Append 会在 log.txt 末尾追加一行日期;如果要创建全新的报告,则省略 -Append。如果多个命令都要写入同一个文件,请为每次写入使用相同的编码,以保持文本一致。

如何在 Out-File 和 PowerShell 会话记录之间选择

如果你要将单个命令的输出写入指定文件,或希望脚本生成一份内容集中的文本报告,请使用 Out-File。它可以在每次运行时替换报告,也可以通过 -Append 将内容追加到报告中。由于它写入的是格式化文本,如果后续步骤需要结构化数据,而非便于阅读的列表,请选择其他导出命令。

如果你需要记录更完整的交互会话,包括执行的命令及其显示的输出,请使用 Start-Transcript 和 Stop-Transcript。在要记录的操作开始前启动会话记录,结束后停止;使用 Start-Transcript -Path 指定保存路径。会话记录包含的信息可能比单个命令的输出更全面,因此,聚焦于某项结果时使用 Out-File,记录会话过程时使用会话记录。