我有点不知道为什么这段代码没有按照我的想法去做。
这是更大计划的一部分,但实质上我试图用文本文件中的条目填充数组的一部分,尽管我用硬编码数组替换了该位。最终结果是一样的。
$users = 12345,23456,34567,45678,56789,67890
$a = New-Object PSCustomObject
$a = $a|Select ID
$collection = @()
$users|%{
$a.ID = $_
$collection += $a
}
$collection|ft -a
这输出以下内容:
ID
--
67890
67890
67890
67890
67890
67890
如果在构建时将阵列输出到屏幕,则可以观察每次使用最新条目替换值。 什么是错?我初始化$ a变量或数组的方式有什么不寻常之处吗?
答案 0 :(得分:2)
这样做是因为只有一个对象($ a),而你所有的循环正在做的是改变一个属性(ID)的值,并向数组中添加另一个对象的引用。
您需要为循环的每个循环创建一个新对象:
$users = 12345,23456,34567,45678,56789,67890
$a = New-Object PSCustomObject
$a = $a|Select ID
$collection = @()
$users|%{
$a = New-Object PSCustomObject
$a = $a|Select ID
$a.ID = $_
$collection += $a
}
$collection|ft -a
答案 1 :(得分:0)
不太确定你在这里想要完成什么,真的......但如果你这样尝试怎么办?
$collection += $a.ID
答案 2 :(得分:0)
PS正在将对象本身的引用添加到数组中,而不是添加时的对象内容。在任何时候更改$a.ID
的值都会更改$collection
显示的内容。
要解决此问题,您可以在$a
语句中移动%
的初始化,如下所示:
$users = 12345,23456,34567,45678,56789,67890
$collection = @()
$users|%{
$a = New-Object PSCustomObject
$a = $a|Select ID
$a.ID = $_
$collection += $a
}
$collection|ft -a
或者只是简单地将$a.ID
添加到$collection
,如果您只想要该数组中的ID值。
答案 3 :(得分:0)
您创建一个对象($ a)。然后,您将此一个对象多次添加到$ collection。每次添加它都会更改其.ID属性值。所以最后你有$ collection包含这个对象的许多副本。因此,您可以获得该ID值的许多副本。如果您希望多个对象具有不同的值,则每次在循环内创建一个新对象。