使用for循环更改pscustomobject数组的值

时间:2014-12-05 14:39:37

标签: powershell for-loop powershell-v3.0 pscustomobject

我试图创建一个自定义对象数组(pscustomobject),现在我尝试使用for循环更改不同自定义对象的某些值。但它似乎不起作用。这是我试过的:

$obj = @([pscustomobject]@{value=0;type="D";used=$false})
$arr1 = @($obj) * 10

for($v = 0; $v -lt 4; $v++){
 $arr1[$v].value = ($v+1)
 $arr1[$v].type ="bubble"
}

结果是:

                        value type                                                   used
                    ----- ----                                                   ----
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False
                        4 bubble                                                False

但我希望结果如下:

                        value type                                                   used
                    ----- ----                                                   ----
                        1 bubble                                                False
                        2 bubble                                                False
                        3 bubble                                                False
                        4 bubble                                                False
                        4 D                                                     False
                        4 D                                                     False
                        4 D                                                     False
                        4 D                                                     False
                        4 D                                                     False
                        4 D                                                     False

这只是一个剪辑,我只是​​尝试了一些东西。但我有点恼火,我不明白......对不起,我认为这很容易思考,但是看不到什么......我仍然是PS noob ... : - /

编辑:使用PSv3,但我认为这并不重要......

1 个答案:

答案 0 :(得分:3)

此:

$arr1 = @($obj) * 10

没有创建10个新对象。它创建了10个对同一对象的引用。

如果你这样做,请注意区别:

$arr1 = 1..10 |% {[pscustomobject]@{value=0;type="D";used=$false}}

for($v = 0; $v -lt 4; $v++){
 $arr1[$v].value = ($v+1)
 $arr1[$v].type ="bubble"
}
$arr1

                                       value type                                                                                 used
                                       ----- ----                                                                                 ----
                                           1 bubble                                                                              False
                                           2 bubble                                                                              False
                                           3 bubble                                                                              False
                                           4 bubble                                                                              False
                                           0 D                                                                                   False
                                           0 D                                                                                   False
                                           0 D                                                                                   False
                                           0 D                                                                                   False
                                           0 D                                                                                   False
                                           0 D                                                                                   False