从CSV中定义powershell变量,可以单独编辑

时间:2018-03-21 17:59:28

标签: powershell csv variables

我在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等)时,这不会发生。

是否有人知道此问题的解决方法?或者,如果在这种特定情况下出现这种情况的原因是什么?

亲切的问候, 本

1 个答案:

答案 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'