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

PowerShell CSV日志追踪脚本问题:无法正确追加与更新计数

解决PowerShell日志系统中Total计数不更新及数据追加问题

你的脚本核心问题有两个:一是$total++的用法错误,二是数据处理逻辑导致重复或更新失效,下面是修正后的方案:

问题分析

  1. $total++不生效:这是后置自增运算符的特性——$total++会先返回当前值,再执行自增,所以你赋值给Total的还是原来的数值。应该改用$total + 1或者前置自增++$total。
  2. 数据重复与更新逻辑混乱:原脚本直接把新对象追加到$CSVHistory,同时又把历史数据中不在当前API的部分也加进去,会导致数据重复;另外用字符串拼接对比对象效率低,且容易出错。

修正后的脚本

$APIData = $APIData.LIST
$file = $filepath
$currentDate = Get-Date # 确保时间变量已定义

# 用哈希表存储历史数据,通过唯一键实现快速查找
$historyHash = @{}
Import-CSV -Path $file | ForEach-Object {
    # 组合唯一标识键,避免字符串拼接冲突
    $key = "$($_.City)|$($_.State)|$($_.TicketCount)|$($_.Price)"
    $historyHash[$key] = $_
}

# 处理当前API返回的数据
foreach ($object in $APIData) {
    $key = "$($object.City)|$($object.State)|$($object.TicketCount)|$($object.Price)"
    if ($historyHash.ContainsKey($key)) {
        # 数据已存在,更新计数和最后操作时间
        $existingItem = $historyHash[$key]
        $existingItem.Total = [int]$existingItem.Total + 1
        $existingItem.LastDeleted = $currentDate
    }
    else {
        # 新增数据,初始化追踪字段
        $newItem = [PSCustomObject]@{
            City        = $object.City
            State       = $object.State
            TicketCount = $object.TicketCount
            Price       = $object.Price
            Total       = 1
            LogTime     = $currentDate
            LastDeleted = $currentDate
        }
        $historyHash[$key] = $newItem
    }
}

# 将所有更新后的数据导出回CSV
$historyHash.Values | Export-CSV -Path $file -NoTypeInformation

关键改进点

  • 哈希表高效查找:用唯一键作为哈希表索引,对比和更新操作的效率远高于遍历字符串,避免重复处理。
  • 正确更新计数:直接对现有对象的Total属性执行+1操作,规避自增运算符的逻辑陷阱。
  • 避免数据重复:所有数据统一维护在哈希表中,最后一次性导出,不会出现重复追加的问题。
  • 补全必要变量:明确$currentDate的赋值,避免原脚本中因变量未定义导致的时间字段错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 01:26:17