PowerShell ConvertTo-Csv
最后修改:2025 年 2 月 15 日
本文介绍PowerShell中的ConvertTo-Csv cmdlet。它将对象转换为一系列CSV字符串。此cmdlet对于数据导出和与其他系统的互操作性非常有用。
CSV基础知识
CSV(逗号分隔值)是一种用于存储表格数据的简单文件格式。每一行代表一个记录,字段之间用逗号分隔。PowerShell对象可以序列化为CSV格式以进行存储或传输。ConvertTo-Csv cmdlet负责此转换。
基本ConvertTo-Csv用法
使用ConvertTo-Csv的最简单方法是将其通过管道传输对象。该cmdlet输出表示输入对象的CSV字符串。第一行包含列标题。随后的行包含属性值。
Get-Process | Select-Object -First 3 | ConvertTo-Csv
此命令获取三个进程并将其转换为CSV格式。输出包括标题和三行数据。每个属性都成为CSV输出中的一列。
PS C:\> .\csv1.ps1 "Name","Id","PriorityClass","FileVersion","HandleCount","WorkingSet","PagedMemorySize","PrivateMemorySize","VirtualMemorySize","TotalProcessorTime","SI","Handles","VM","WS","PM","NPM","Path","Company","CPU","ProductVersion","Description","Product","BasePriority","ExitCode","HasExited","ExitTime","Handle","SafeHandle","MachineName","MainWindowHandle","MainWindowTitle","MainModule","MaxWorkingSet","MinWorkingSet","Modules","NonpagedSystemMemorySize","NonpagedSystemMemorySize64","PagedMemorySize64","PagedSystemMemorySize","PagedSystemMemorySize64","PeakPagedMemorySize","PeakPagedMemorySize64","PeakWorkingSet","PeakWorkingSet64","PeakVirtualMemorySize","PeakVirtualMemorySize64","PriorityBoostEnabled","PrivateMemorySize64","PrivilegedProcessorTime","ProcessName","ProcessorAffinity","Responding","SessionId","StartInfo","StartTime","SynchronizingObject","Threads","TotalProcessorTime","UserProcessorTime","VirtualMemorySize64","EnableRaisingEvents","StandardInput","StandardOutput","StandardError","WorkingSet64","Site","Container" "ApplicationFrameHost","11928","Normal","10.0.19041.746 (WinBuild.160101.0800)","338","43417600","24862720","24862720","24862720","00:00:00.0312500",1,"338","24862720","43417600","24862720","24862720","C:\WINDOWS\system32\ApplicationFrameHost.exe","Microsoft Corporation","0.03125","10.0.19041.746","Application Frame Host","Microsoft® Windows® Operating System","8",,,,"11928",,".",0,"",,,,"0","0","24862720","0","0","24862720","24862720","43417600","43417600","24862720","24862720",True,"24862720","00:00:00.0156250","ApplicationFrameHost","1",True,1,,,,,"00:00:00.0312500","00:00:00.0156250","24862720",False,,,,,"43417600",, "armsvc","1108","Normal",,"43","1269760","0","0","0","00:00:00",1,"43","0","1269760","0","0",,,,"0",,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,, "audiodg","2588","Normal","10.0.19041.1 (WinBuild.160101.0800)","156","17653760","0","0","0","00:00:00.0156250",1,"156","0","17653760","0","0","C:\WINDOWS\system32\audiodg.exe","Microsoft Corporation","0.015625","10.0.19041.1","Windows Audio Device Graph Isolation","Microsoft® Windows® Operating System","13",,,,"2588",,".",0,"",,,,"0","0","0","0","0","0","0","17653760","17653760","0","0",True,"0","00:00:00","audiodg","1",True,0,,,,,"00:00:00.0156250","00:00:00.0156250","0",False,,,,,"17653760",,
CSV输出中的自定义分隔符
默认情况下,ConvertTo-Csv使用逗号作为分隔符。您可以使用-Delimiter参数指定不同的分隔符。当逗号是数据的一部分时,这很有用。常见的替代方法包括分号或制表符。
Get-Service | Select-Object -First 3 | ConvertTo-Csv -Delimiter ";"
此命令以分号分隔符将服务信息转换为CSV。输出结构保持不变,但使用分号而不是逗号。这种格式在欧洲地区通常更受欢迎。
排除类型信息
ConvertTo-Csv默认在第一行包含类型信息。您可以使用-NoTypeInformation参数禁止此操作。这可以为大多数应用程序创建更干净的CSV文件。输出直接以列标题开始。
Get-Process | Select-Object -First 3 | ConvertTo-Csv -NoTypeInformation
此命令生成不带类型信息行的CSV输出。结果与标准CSV解析器更兼容。仅包含属性标题和数据行。
选择特定属性
您可以控制CSV输出中包含哪些属性。在转换为CSV之前,请使用Select-Object。这可以减小文件大小并专注于相关数据。输出中只会显示指定的属性。
Get-Process | Select-Object Name, Id, CPU | ConvertTo-Csv -NoTypeInformation
此命令仅将进程名称、ID和CPU使用率导出到CSV。输出比完整的对象转换更简洁。您可以指定输入对象上可用的任何属性。
将CSV保存到文件
虽然ConvertTo-Csv将输出到控制台,但您可以将其重定向到文件。使用重定向运算符(>)或Out-File cmdlet。这会创建持久的CSV文件以供以后使用。该文件可以在Excel或其他工具中打开。
Get-Service | ConvertTo-Csv -NoTypeInformation | Out-File services.csv
此命令将服务信息保存到services.csv。文件包含CSV格式的数据,可供其他地方导入。始终使用-NoTypeInformation以获得干净的文件输出。
使用自定义对象
ConvertTo-Csv可与任何PowerShell对象一起使用,包括自定义对象。您可以使用New-Object或带有计算属性的Select-Object创建对象。该cmdlet处理这些对象的方式与系统对象相同。
$customObjects = @(
[PSCustomObject]@{Name="Server1"; Status="Online"; Uptime=120}
[PSCustomObject]@{Name="Server2"; Status="Offline"; Uptime=0}
[PSCustomObject]@{Name="Server3"; Status="Online"; Uptime=360}
)
$customObjects | ConvertTo-Csv
此示例创建自定义对象并将其转换为CSV。输出包括标题和数据行中的所有已定义属性。自定义对象遵循与系统对象相同的转换规则。
来源
本文介绍了PowerShell中的ConvertTo-Csv cmdlet。我们探讨了数据转换的基本用法和高级场景。
作者
列出 所有 PowerShell 教程。