如何修改PowerShell中Import-Csv导入的PSCustomObject数组值?
解决PowerShell中修改Import-Csv导入对象属性的问题
你遇到的问题是因为对Import-Csv返回的对象结构理解有偏差~
问题原因
Import-Csv导入CSV后返回的是PSObject对象数组,数组里的每个元素对应CSV的一行数据,每个元素的属性对应CSV的列。你写的$ds.B其实是把数组中所有对象的B属性值提取出来,生成了一个新的临时数组——这个临时数组和原对象没有绑定关系,所以修改$ds.B[1]只会改变这个临时数组里的值,不会影响原$ds数组中的对象属性。
正确修改方法
要修改第二行(索引为1)的B列值,你需要先定位到数组中的第二个对象,再直接修改它的B属性:
$ds = Import-Csv test.csv -UseCulture $ds # 查看原始数据 $ds[1].B = 9 # 定位到第二个对象,修改它的B属性 $ds # 再次查看,会看到第二行的B值已经变成9了
补充说明
$ds[n]表示数组中第n+1行的对象(因为PowerShell数组索引从0开始)- 直接访问对象的属性(比如
$ds[n].B)才能真正修改原数据 - 如果需要批量修改多个行的属性,可以用循环(比如
foreach)或者ForEach-Object来处理
内容的提问来源于stack exchange,提问作者Ari Tertsunen
相关产品推荐
相关产品推荐

