无需硬编码列名创建动态哈希表的实现方案咨询
实现方案
可以实现,你原有代码的核心问题是仅创建了1个PS对象,循环内反复给同一个对象追加属性,自然无法得到多条目、动态列的列表结构。
正确的实现逻辑是为每个条目单独创建PS对象,所有对象存入统一数组,Powershell会自动识别所有对象中出现过的属性作为列,缺失属性的条目对应列自动留空,不需要提前硬编码所有50个可选列。
示例实现代码:
# 初始化空数组存储所有条目对象 $itemList = @() foreach ($item in $items) { # 单条目标初始化,先赋值固定的第一列Item(Id) $currentItem = [PSCustomObject]@{ Item = $item.Id } # 遍历当前条目的所有子特性,动态追加属性 foreach ($sub in $item.SubFeaturePairs) { $subFeatureName = $sub.Name $subFeatureValue = $sub.Value # -Force参数避免重复添加同属性时报错 $currentItem | Add-Member -NotePropertyName $subFeatureName -NotePropertyValue $subFeatureValue -Force } # 将当前条目加入数组 $itemList += $currentItem } # 输出验证,自动对齐所有动态列 $itemList | Format-Table -AutoSize # 如需导出CSV也可以直接调用,列会自动补全 # $itemList | Export-Csv -Path "./output.csv" -NoTypeInformation -Encoding UTF8
执行后输出的结构和你给出的预期示例完全一致,自动适配所有出现过的子特性作为列,未配置的子特性对应位置为空。
内容的提问来源于stack exchange,提问作者Baequiraheal
相关产品推荐
相关产品推荐

