You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

向CSV文件添加条目报错:PSObject不含'op_Addition'方法

问题分析与解决方案

错误根源

当你的CSV日志文件只有表头(无数据行)或者仅有1条数据记录时,Import-Csv返回的是单个PSObject对象,而非数组。此时执行$Log += $NewLogEntry会报错,因为单个PSObject没有定义加法操作(op_Addition方法)。只有当CSV有2条及以上记录时,Import-Csv才会返回数组,+=才能正常工作——这就是报错随机的原因。

另外你尝试的$Log2 = Log+= $NewLogEntry是语法错误,正确写法应为$Log2 = $Log += $NewLogEntry,但这无法解决根本问题。


解决方案

方案1:强制将导入结果转为数组

通过@()运算符,确保$Log始终是数组类型,无论CSV中有多少条记录:

# 强制转为数组,避免单个对象的情况
$Log = @(Import-Csv -Path "C:\Temp\Logging.csv")

$NewLogEntry = [PSCustomObject]@{
  LastWriteTime = $Path.LastWriteTime.ToString('hh:mm ddd MMM dd yy')
  BackupFile    = $path
  MountedDrive  = $Drive.ToUpper()
}

$Log += $NewLogEntry
# 导出时去掉默认的类型信息行(#TYPE...)
$Log | ConvertTo-Csv -NoTypeInformation | Set-Content -Path "C:\Temp\Logging.csv" -Force

方案2:直接追加单行到CSV(更高效)

如果日志文件较大,读取整个文件再写入会影响性能,还可能出现文件锁问题。可以直接将新记录转为CSV格式后追加到文件:

$NewLogEntry = [PSCustomObject]@{
  LastWriteTime = $Path.LastWriteTime.ToString('hh:mm ddd MMM dd yy')
  BackupFile    = $path
  MountedDrive  = $Drive.ToUpper()
}

# 如果文件不存在,先写入表头
if (-not (Test-Path "C:\Temp\Logging.csv")) {
  $NewLogEntry | ConvertTo-Csv -NoTypeInformation | Set-Content -Path "C:\Temp\Logging.csv" -Force
} else {
  # 仅追加新记录的CSV行(跳过表头)
  $NewLogEntry | ConvertTo-Csv -NoTypeInformation | Select-Object -Skip 1 | Add-Content -Path "C:\Temp\Logging.csv" -Force
}

内容的提问来源于stack exchange,提问作者gaberiel__

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.29 06:12:35