ZetCode

PowerShell Export-Csv

最后修改:2025 年 2 月 15 日

在本文中,我们将介绍 PowerShell 中的 Export-Csv cmdlet。此 cmdlet 将对象转换为 CSV 格式并将其保存到文件中。CSV 文件广泛用于系统之间的数据交换。

CSV基础知识

CSV(逗号分隔值)是一种用于存储表格数据的简单文件格式。每一行代表一个行,列由逗号分隔。PowerShell 的 Export-Csv 默认创建带标题的文件。该 cmdlet 将对象属性保留为输出文件中的列。

基本的 Export-Csv 用法

使用 Export-Csv 最简单的方法是将其与文件路径一起管道传输对象。这将创建一个包含所有对象属性的 CSV 文件。第一行包含列标题。接下来的每一行代表一个对象的属性值。

export1.ps1
Get-Process | Export-Csv -Path "processes.csv"

此命令将所有正在运行的进程导出到名为 processes.csv 的 CSV 文件。该文件将包含 ProcessName、Id、CPU 等列以及其他属性。

导出特定属性

您可以使用 Select-Object 选择要包含在 CSV 文件中的特定属性。这可以减小文件大小并提高可读性。将只导出指定的属性。列的顺序与属性选择顺序匹配。

export2.ps1
Get-Process | 
    Select-Object Name, Id, CPU, WorkingSet | 
    Export-Csv -Path "process_summary.csv"

此命令仅导出每个进程的四个属性。生成的 CSV 文件将更小,更易于进行基本分析。

追加到现有的 CSV 文件

-Append 参数会将数据添加到现有的 CSV 文件中,而不是覆盖它。新数据必须与现有文件具有相同的结构。标题仅在创建新文件时写入。

export3.ps1
Get-Service | 
    Select-Object Name, Status | 
    Export-Csv -Path "services.csv" -Append

此命令将服务信息追加到现有的 CSV 文件中。如果文件不存在,它将以标题创建。后续运行会添加新行,而不会重复标题。

使用不同的分隔符

虽然 CSV 通常使用逗号,但您可以使用 -Delimiter 指定不同的分隔符。这对于与期望其他分隔符的系统兼容非常有用。常见的替代方法包括分号或制表符。

export4.ps1
Get-ChildItem | 
    Export-Csv -Path "files.txt" -Delimiter "`t"

此命令使用制表符作为分隔符导出文件信息。反引号 t (`t) 在 PowerShell 中表示制表符字符。输出文件可以在电子表格软件中作为制表符分隔的文件打开。

导出时不带类型信息

默认情况下,Export-Csv 会在第一行包含类型信息。使用 -NoTypeInformation 来省略此元数据。这会创建更干净的 CSV 文件,并与更多应用程序兼容。

export5.ps1
Get-Process | 
    Export-Csv -Path "clean_processes.csv" -NoTypeInformation

生成的 CSV 文件直接以列标题开头。许多数据分析工具更喜欢这种不带类型元数据的更简单的格式。

处理特殊字符

在导出包含逗号或引号的数据时,Export-Csv 会自动对其进行转义。包含分隔符的字符串会被引号括起来。内部引号会被加倍以正确转义。

export6.ps1
$data = @(
    [PSCustomObject]@{Name="File,1"; Size=100}
    [PSCustomObject]@{Name="File""2"; Size=200}
)
$data | Export-Csv -Path "special_chars.csv"

这会创建一个 CSV 文件,该文件可以正确处理包含逗号和引号的名称。输出将在导入回时保持数据完整性。

使用 Encoding 参数

-Encoding 参数指定输出文件的字符编码。UTF8 通常用于国际字符。ASCII 可能适用于旧系统。

export7.ps1
Get-Process | 
    Export-Csv -Path "utf8_processes.csv" -Encoding UTF8

这确保 CSV 文件使用 UTF-8 编码,支持进程名称中的国际字符。默认编码因 PowerShell 版本和系统配置而异。

来源

PowerShell 文档

在本文中,我们介绍了 PowerShell 中的 Export-Csv cmdlet。

作者

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

列出 所有 PowerShell 教程