PowerShell如何实现每次while循环后向CSV文件按列追加新行数据
解决方案
你可以直接使用PowerShell内置的Export-Csv命令的-Append参数实现追加写入,不需要手动拼接CSV内容,还能自动处理特殊字符转义问题,修改后的完整代码如下:
# 初始化CSV文件,仅第一次运行创建表头,重复运行不会覆盖原有数据(要覆盖可以去掉-NoClobber参数) $csvPath = ".\Test.csv" if (-not (Test-Path $csvPath)) { "" | Select-Object Date, RAM_1, RAM_2, RAM_3, 'RAM_Used_total_%', 'RAM_Free%', 'CPU_Load%' | Export-Csv -Path $csvPath -NoTypeInformation -Delimiter ";" -Encoding UTF8 } while($true) { # 这里是你原有采集变量的逻辑,确保以下变量都正常赋值 $date = Get-Date -Format "yyyy-MM-dd HH:mm:ss" # 示例日期赋值,你可以保留自己的采集逻辑 # $RAM_1 = 你的采集逻辑 # $RAM_2 = 你的采集逻辑 # $RAM_3 = 你的采集逻辑 # $RAM_Usage = 你的采集逻辑 # $Free_RAM = 你的采集逻辑 # $CPU_Load = 你的采集逻辑 # 构造和表头字段对应的对象 $row = [PSCustomObject]@{ Date = $date RAM_1 = $RAM_1 RAM_2 = $RAM_2 RAM_3 = $RAM_3 'RAM_Used_total_%' = $RAM_Usage 'RAM_Free%' = $Free_RAM 'CPU_Load%' = $CPU_Load } # 追加写入到CSV,自动对应列、占新行 $row | Export-Csv -Path $csvPath -Append -NoTypeInformation -Delimiter ";" -Encoding UTF8 Start-Sleep -Seconds 60 }
核心说明
- 构造的自定义对象的字段名必须和CSV表头完全一致,带特殊符号的字段要用引号包裹避免语法错误,系统会自动把属性值写入对应列
-Append参数会自动在文件末尾新增一行,不会覆盖原有内容- 统一指定
-Encoding UTF8避免出现乱码问题
如果你的PowerShell版本低于3.0不支持-Append参数,可以用下面的方式替换追加写入的逻辑:
# 替换上面的Export-Csv追加行的代码 ($row | ConvertTo-Csv -NoTypeInformation -Delimiter ";")[1] | Out-File -Path $csvPath -Append -Encoding UTF8
这个原理是ConvertTo-Csv会返回两行内容,第一行是表头,第二行是数据行,取索引为1的第二行直接追加到文件即可。
内容的提问来源于stack exchange,提问作者Irina_008
相关产品推荐
相关产品推荐

