合并变量会导致“ ...不包含名为'op_Addition'的方法

时间:2019-11-14 08:08:38

标签: powershell

这使我困惑了几天。我习惯将2个变量结合在一起,例如

$a = "1"
$b = "2"
$c = $a + $b

结果:$c = "12"

我试图将2个变量连接在一起,或者将数据合并为2个变量,而这2个变量恰好是一个数据表,每个数据表都有多个行或条目,因此我只剩下一个表。就我而言,我有6个表,每个表有20多个条目,我想将它们合并到一个合并列表中。

我数据中的一列恰好是一个数组:

$d =
column1        : 123
column2        : 456    
column3        : 789
column4        : 012
column5        : {345}

column1        : 234
column2        : 457    
column3        : 890
column4        : 123
column5        : {}

$e = 
column1        : 987
column2        : 654    
column3        : 321
column4        : 098
column5        : {765,432}

column1        : 555
column2        : 444    
column3        : 333
column4        : 222
column5        : {111,222,333}

column1        : 666
column2        : 777    
column3        : 888
column4        : 999
column5        : {000}

我的每个变量的数据结构都相同,即列的编号和名称相同。

我尝试了很多不同的方法来做到这一点。我值得分享的尝试包括:

$f = $d + $e 

失败,并显示错误:

  

方法调用失败,因为[System.Management.Automation.PSObject]不包含名为“ op_Addition”的方法。

我尝试过:

$f = $d | Select-Object -Property *
$f = $f + $e | Select-Object -Property *

这还会导致与上述相同的错误。

我尝试过将数据选择到哈希表(?)中的尝试

$f = $d | Select-Object -Property @('*')

但是,这仍然不能带我到任何地方。

我尝试使用-append选项将变量导出到CSV文件中,以为我可以将所有变量重新导入并很好地合并在一起,但这是一个灾难,因为数组的内容丢失了。

在DuckDuckGo / StckOverflow上提到“不包含名为'op_Addition'的方法”,但对于我将表组合在一起的特殊情况,则没有提及。

我很茫然,因为一开始似乎是将两个变量连接在一起的“简单”情况。

2 个答案:

答案 0 :(得分:0)

此行为是由动态键入引起的。正如您没有告诉Powershell使用什么类型的变量,它引起了很大的猜测。由于12在双引号之间,因此假定它们是字符串而不是数字。字符串的+被解释为串联。对于数字类型,它是加法。

在处理自定义对象时,加法通常是不明确的。对于某些类型,存在默认添加。字符串和数组就是这种情况。对于其他类型,没有明智的默认设置。这表示为常见的错误消息不包含名为“ op_Addition”的方法。

组合表的正确方法取决于它们的数据类型。作为伪代码,这样的过程可以工作:

create new table n
for each table t in your result set
    copy each row to nt from t
save nt

答案 1 :(得分:0)

谢谢安斯加尔

有效的答案实际上是:

$ f = @($ d); $ f + = $ e