ZetCode

PowerShell Out-File

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍 PowerShell 中的 Out-File cmdlet。此 cmdlet 将输出发送到文件。它对于将命令结果或脚本输出保存到磁盘非常有用。该 cmdlet 提供了各种参数来控制文件编码和格式。

Out-File 基础知识

Out-File cmdlet 将输出写入指定的文件。默认情况下,它会创建一个新文件或覆盖现有文件。该 cmdlet 保留原始输出的格式。它支持不同的字符编码以处理国际文本。文件路径可以是绝对路径或相对路径。

Out-File 基本用法

使用 Out-File 的最简单方法是将其管道化命令输出。使用 -FilePath 参数指定文件路径。如果未指定路径,则文件将在当前目录中创建。此示例演示了基本的文件输出。

outfile1.ps1
Get-Process | Out-File -FilePath "processes.txt"

此命令将正在运行的进程列表写入 processes.txt。输出格式与您在控制台中看到的匹配。文件将在当前工作目录中创建。

追加到现有文件

要将内容添加到现有文件而不覆盖,请使用 -Append 参数。这对于日志记录或随着时间的推移累积数据非常有用。如果文件不存在,则会创建它。每次新添加的内容都会出现在文件末尾。

outfile2.ps1
Get-Date | Out-File -FilePath "log.txt" -Append
"System check performed" | Out-File -FilePath "log.txt" -Append

此示例将当前日期和一条消息追加到 log.txt。多个命令可以写入同一个文件。每个条目都出现在新行上。

控制文件编码

默认情况下,Out-File 使用 Unicode (UTF-16LE) 编码。您可以使用 -Encoding 参数指定不同的编码。常见选项包括 ASCII、UTF8 和 UTF32。这对于与其他系统或应用程序的兼容性很重要。

outfile3.ps1
"PowerShell output" | Out-File -FilePath "output.txt" -Encoding UTF8

此命令使用 UTF-8 编码将文本写入 output.txt。UTF-8 与 Web 应用程序和 Linux 系统广泛兼容。文件大小将比默认 Unicode 编码时要小。

限制行宽

-Width 参数控制输出文件中的最大行长度。这可以防止长行在输出中被截断。默认宽度为 80 个字符。您可以增加此值以容纳复杂数据。

outfile4.ps1
Get-Service | Out-File -FilePath "services.txt" -Width 200

此命令将服务信息写入文件,行宽为 200 个字符。更宽的输出可以保留更多数据列。根据您的数据和查看要求进行调整。

NoClobber 保护

-NoClobber 参数可防止意外覆盖现有文件。如果文件存在,PowerShell 将生成错误而不是覆盖。这是对重要文件的一项安全功能。与 -Force 结合使用以覆盖保护。

outfile5.ps1
"Important data" | Out-File -FilePath "data.txt" -NoClobber

如果 data.txt 已存在,此命令将失败。现有文件保持不变。删除 -NoClobber 或使用 -Force 来覆盖现有文件。

重定向错误输出

您可以使用重定向将错误消息捕获到输出文件中。2>&1 操作符将错误输出重定向到成功流。这允许对命令结果进行完整记录,包括错误。

outfile6.ps1
Get-ChildItem C:\Nonexistent 2>&1 | Out-File -FilePath "errors.txt"

此命令尝试列出一个不存在的目录。错误消息被捕获在 errors.txt 中。如果存在正常输出,也会包含在内。

输出前的格式化

您可以使用格式化 cmdlet 在写入文件之前对数据进行格式化。Format-TableFormat-List 可以调整输出显示。这提供了对数据在文件中显示方式的控制。

outfile7.ps1
Get-Process | Select-Object Name, CPU | Format-Table -AutoSize | Out-File "process_cpu.txt"

此命令创建进程名称和 CPU 使用率的表。-AutoSize 参数可以调整列宽。格式化的表将被写入文件。

来源

PowerShell 文档

在本文中,我们介绍了 PowerShell 中的 Out-File cmdlet。

作者

我的名字是 Jan Bodnar,我是一名充满激情的程序员,拥有丰富的编程经验。我自 2007 年以来一直在撰写编程文章。迄今为止,我已撰写了 1400 多篇文章和 8 本电子书。我在编程教学方面拥有十多年的经验。

列出 所有 PowerShell 教程