PowerShell Export-Csv
最后修改:2025 年 2 月 15 日
在本文中,我们将介绍 PowerShell 中的 Export-Csv cmdlet。此 cmdlet 将对象转换为 CSV 格式并将其保存到文件中。CSV 文件广泛用于系统之间的数据交换。
CSV基础知识
CSV(逗号分隔值)是一种用于存储表格数据的简单文件格式。每一行代表一个行,列由逗号分隔。PowerShell 的 Export-Csv 默认创建带标题的文件。该 cmdlet 将对象属性保留为输出文件中的列。
基本的 Export-Csv 用法
使用 Export-Csv 最简单的方法是将其与文件路径一起管道传输对象。这将创建一个包含所有对象属性的 CSV 文件。第一行包含列标题。接下来的每一行代表一个对象的属性值。
Get-Process | Export-Csv -Path "processes.csv"
此命令将所有正在运行的进程导出到名为 processes.csv 的 CSV 文件。该文件将包含 ProcessName、Id、CPU 等列以及其他属性。
导出特定属性
您可以使用 Select-Object 选择要包含在 CSV 文件中的特定属性。这可以减小文件大小并提高可读性。将只导出指定的属性。列的顺序与属性选择顺序匹配。
Get-Process |
Select-Object Name, Id, CPU, WorkingSet |
Export-Csv -Path "process_summary.csv"
此命令仅导出每个进程的四个属性。生成的 CSV 文件将更小,更易于进行基本分析。
追加到现有的 CSV 文件
-Append 参数会将数据添加到现有的 CSV 文件中,而不是覆盖它。新数据必须与现有文件具有相同的结构。标题仅在创建新文件时写入。
Get-Service |
Select-Object Name, Status |
Export-Csv -Path "services.csv" -Append
此命令将服务信息追加到现有的 CSV 文件中。如果文件不存在,它将以标题创建。后续运行会添加新行,而不会重复标题。
使用不同的分隔符
虽然 CSV 通常使用逗号,但您可以使用 -Delimiter 指定不同的分隔符。这对于与期望其他分隔符的系统兼容非常有用。常见的替代方法包括分号或制表符。
Get-ChildItem |
Export-Csv -Path "files.txt" -Delimiter "`t"
此命令使用制表符作为分隔符导出文件信息。反引号 t (`t) 在 PowerShell 中表示制表符字符。输出文件可以在电子表格软件中作为制表符分隔的文件打开。
导出时不带类型信息
默认情况下,Export-Csv 会在第一行包含类型信息。使用 -NoTypeInformation 来省略此元数据。这会创建更干净的 CSV 文件,并与更多应用程序兼容。
Get-Process |
Export-Csv -Path "clean_processes.csv" -NoTypeInformation
生成的 CSV 文件直接以列标题开头。许多数据分析工具更喜欢这种不带类型元数据的更简单的格式。
处理特殊字符
在导出包含逗号或引号的数据时,Export-Csv 会自动对其进行转义。包含分隔符的字符串会被引号括起来。内部引号会被加倍以正确转义。
$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 可能适用于旧系统。
Get-Process |
Export-Csv -Path "utf8_processes.csv" -Encoding UTF8
这确保 CSV 文件使用 UTF-8 编码,支持进程名称中的国际字符。默认编码因 PowerShell 版本和系统配置而异。
来源
在本文中,我们介绍了 PowerShell 中的 Export-Csv cmdlet。
作者
列出 所有 PowerShell 教程。