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

PowerShell解析对象生成PSCustomObject的报错问题求助

问题分析与解决方案

首先来看你遇到的报错:德语提示的核心是设置属性时传入的name参数无效,结合你的代码片段$ReturnObjekt."$($_.Name)" += $o.Rows[$_],大概率是这几个原因:

  1. 你试图给单个PSCustomObject的属性用+=追加元素,但该属性并未初始化为数组类型,PowerShell无法直接对非数组属性执行追加操作;
  2. 你的逻辑方向有误——你试图构建一个包含数组属性的对象,而不是生成多个单行对象,这和你想要的最终输出结构不符。

正确实现方案

我们的核心思路是:按索引遍历所有列的数组元素,为每个索引位置生成一个独立的PSCustomObject,这样就能得到你需要的多行对应结构。以下是完整的可运行代码:

function Convert-ColumnArrayToRows {
    param(
        [Parameter(Mandatory=$true)]
        $InputObject
    )

    # 提取列名和对应的行数组集合
    $columnNames = $InputObject.Columns.Name
    $rowArrays = $InputObject.Columns.Rows

    # 确定最大的行数(兼容列数组长度不一致的情况)
    $maxRowCount = ($rowArrays | Measure-Object -Property Length -Maximum).Maximum

    # 遍历每个索引,生成单行对象
    for ($i = 0; $i -lt $maxRowCount; $i++) {
        # 使用有序哈希表保持列的原始顺序
        $rowProperties = [ordered]@{}
        
        foreach ($colIndex in 0..($columnNames.Count - 1)) {
            # 获取当前列第i个元素,如果索引超出数组长度则返回$null
            $currentValue = if ($i -lt $rowArrays[$colIndex].Length) {
                $rowArrays[$colIndex][$i]
            } else {
                $null
            }
            $rowProperties[$columnNames[$colIndex]] = $currentValue
        }

        # 转换为PSCustomObject输出
        [PSCustomObject]$rowProperties
    }
}

# 调用示例(模拟你的$Objekt结构)
$sampleObj = [PSCustomObject]@{
    Columns = @(
        [PSCustomObject]@{ Name = "Addr.BoNumber"; Rows = @(212, 210, 211, 104) }
        [PSCustomObject]@{ Name = "Addr.FullName"; Rows = @("xy", "cv", "bn", "mm") }
    )
}

# 执行转换并输出
Convert-ColumnArrayToRows -InputObject $sampleObj

代码解释

  1. 提取核心数据:从$InputObject.Columns中分离出列名集合和对应的行数组集合;
  2. 处理长度不一致:通过Measure-Object获取最长的数组长度,避免因列数组长度不同导致索引越界;
  3. 生成单行对象:
    • 用[ordered]@{}确保输出的列顺序和原始结构一致;
    • 遍历每个列索引,取出对应位置的元素(如果索引超出当前列数组长度则设为$null);
    • 将有序哈希表转换为PSCustomObject,每个索引位置生成一个独立对象。

输出效果

运行上述示例代码后,输出会和你期望的完全一致:

Addr.BoNumber Addr.FullName 
------------- ------------- 
212           xy            
210           cv            
211           bn            
104           mm            

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 06:32:23