PowerShell中不使用管道调用Export-CSV失败问题求助
解决PowerShell中Export-Csv使用-InputObject导出异常的问题
问题根源
Import-Csv读取多行CSV时,返回的是数组类型的集合对象。而Export-Csv的-InputObject参数设计用于接收单个对象:当直接传递数组时,PowerShell会把整个数组当作一个待导出对象,最终导出的是数组自身的属性(如Length、Count),而非数组内的每行数据。
管道传递则不同,PowerShell会自动遍历集合中的每个元素,将每行数据依次传给Export-Csv,因此能正确导出预期内容。
解决方案
1. 优先使用管道传递(最简洁可靠)
这是PowerShell处理集合的标准方式,代码清晰且不易出错:
$docs = Import-Csv -Path "c:\temp\myFile.csv" $docs | Export-Csv -Path "C:\temp\myFile2.csv" -NoTypeInformation
注:
-NoTypeInformation可避免导出文件开头出现多余的类型声明行,PowerShell 7+默认已省略,但显式添加更兼容旧版本。
2. 若必须使用-InputObject,需逐个传入元素
通过foreach循环遍历数组,配合-Append参数实现批量导出:
$docs = Import-Csv -Path "c:\temp\myFile.csv" # 先清空或确保目标文件不存在,避免重复表头 if (Test-Path "C:\temp\myFile2.csv") { Remove-Item "C:\temp\myFile2.csv" } foreach ($doc in $docs) { Export-Csv -Path "C:\temp\myFile2.csv" -InputObject $doc -Append -NoTypeInformation }
内容的提问来源于stack exchange,提问作者Ralf_Reddings
相关产品推荐
相关产品推荐

