PowerShell中如何为CSV添加日期列并同步$test对象数据?
PowerShell 实现CSV动态新增日期列与指标行
核心思路
把CSV结构调整为「行是指标名称、列是日期」的形式,这样每次新增日期列只需给每行添加对应属性,新增指标则直接追加行,完美适配需求。
完整实现代码
# 1. 定义CSV路径与当前日期列名 $csvPath = ".\metrics.csv" $currentDate = Get-Date -Format "MM/dd/yy" # 2. 把$test的属性转换为指标-值哈希表,方便快速查找 $newMetrics = @{} $test.PSObject.Properties | ForEach-Object { $newMetrics[$_.Name] = $_.Value } # 3. 读取现有CSV数据,文件不存在则初始化空数组 $existingData = if (Test-Path $csvPath) { Import-Csv $csvPath } else { @() } # 4. 合并已有指标与新指标,去重得到完整指标列表 $allMetrics = (@($existingData.Name) + @($newMetrics.Keys)) | Select-Object -Unique # 5. 构建新数据集:保留旧日期列数据,填充当前日期列值 $newData = $allMetrics | ForEach-Object { $metric = $_ # 查找当前指标的已有行,无则创建空行 $row = $existingData | Where-Object { $_.Name -eq $metric } if (-not $row) { $row = [PSCustomObject]@{ Name = $metric } } # 新增当前日期列,存在指标则填值,否则留空 $row | Add-Member -NotePropertyName $currentDate -NotePropertyValue $newMetrics[$metric] -Force $row } # 6. 导出回CSV,覆盖原文件 $newData | Export-Csv -Path $csvPath -NoTypeInformation -Force
代码说明
- 结构适配:用「指标为行、日期为列」的结构,彻底解决动态扩展列和行的问题,比原结构更灵活。
- 哈希表处理:通过
PSObject.Properties遍历$test的所有属性,转成哈希表后能快速匹配指标值。 - 指标合并:自动合并新旧指标并去重,确保不会遗漏任何数据点。
- 空值兼容:新增指标的旧日期列自动留空,已有指标的新日期列自动填充对应值。
效果示例
第一次运行后CSV内容:
"Name","10/15/22" "users","7" "SomeBSValue","22" "Computers","52"
第二次运行(假设$test新增"Printers" = "10",日期为10/16/22),CSV更新为:
"Name","10/15/22","10/16/22" "users","7", "SomeBSValue","22", "Computers","52", "Printers","","10"
内容的提问来源于stack exchange,提问作者J. DuBois
相关产品推荐
相关产品推荐

