我在Powershell 4.0中使用了Import-Csv来导入CSV,目的是添加带有变体的重复行。让我们说$ data是一个包含CSV的变量,这是我打印时的输出: -
PS C:> $data
Var1 Var2 Var3 Var4
---- ---- ---- ----
Ans1 Ans2 Ans3 Ans4
然后我创建了一行副本: -
PS C:>$firstRow = $data[0]
理论上,我会修改$ firstRow并将其重新添加为新行: -
$firstRow.Var1 = 'TEST'
这是有趣的地方。像我上面那样修改变量也修改了原始变量: -
PS C:> $data
Var1 Var2 Var3 Var4
---- ---- ---- ----
TEST Ans2 Ans3 Ans4
谷歌搜索并没有真正阐明这一点。我还注意到,当变量是标准变量(例如String,Integer等)时,这不会发生。
是否有人知道此问题的解决方法?或者,如果在这种特定情况下出现这种情况的原因是什么?
亲切的问候, 本
答案 0 :(得分:0)
这种方法在完成你想要的东西方面效率不高,但它会起作用。
$firstRow = new-object psobject
$data[0].psobject.properties | ForEach-Object {
$firstRow | Add-Member -MemberType $_.MemberType -Name $_.Name -Value $_.Value
}
$firstRow.Var1 = 'TEST'
基本上它只是按属性循环属性并将$data
的第一行克隆到$firstRow
参考:How to create new clone instance of PSObject object
编辑感谢TheMadTechnician,可以在此方案中使用psobject复制方法
$firstRow = $data[0].psobject.Copy()
$firstRow.Var1 = 'TEST'