PowerShell创建CSV并追加内容失败,求脚本修正方案
问题分析与修正方案
你的脚本存在几个关键错误,导致无法正常写入CSV:
错误1:误用文件对象的
.add()方法$CSVLog是New-Item返回的文件系统对象,不是可添加元素的集合,调用.add()方法无效,这也不是PowerShell向CSV追加内容的正确方式。错误2:列名不匹配
初始定义的空对象列名是Column1/Column2/Column3(无空格),但循环内的对象列名是Column 1/Column 2/Column 3(带空格),列名不一致会导致数据无法正确映射。错误3:每次循环生成新文件名
循环内用Get-Date拼接文件名,会因时间变化生成多个不同的文件,而非追加到同一个文件中。错误4:空对象直接输出到控制台
开头的空PSCustomObject没有写入文件,而是直接输出到控制台,这就是你看到空表头的原因。
修正后的脚本
Clear-Host # 提前生成固定文件名,避免循环中重复生成 $logFileName = "\File Path\Logs\$(Get-Date -f yyyy-MM-dd_hh-mm-ss) Test Log.csv" # 初始化表头(可选,也可让第一次Export-Csv自动生成) [PSCustomObject]@{ 'Column 1' = '' 'Column 2' = '' 'Column 3' = '' } | Export-Csv -Path $logFileName -NoTypeInformation -Force $i = 0 do { $i++ # 直接生成对象并追加到CSV [PSCustomObject]@{ 'Column 1' = 'Test' 'Column 2' = 'Super Test' 'Column 3' = $i } | Export-Csv -Path $logFileName -NoTypeInformation -Append } while ($i -lt 5)
关键修改说明
- 提前生成固定的
$logFileName变量,确保循环中始终操作同一个文件。 - 统一列名(这里统一为带空格的版本,你也可以改成无空格,只要全程保持一致即可)。
- 移除无效的
.add()调用,直接将PSCustomObject通过管道传给Export-Csv -Append来追加内容。 - 初始的空对象用于初始化表头,也可以直接去掉,让第一次
Export-Csv自动生成表头。
内容的提问来源于stack exchange,提问作者RustyAndroid
相关产品推荐
相关产品推荐

