1

我有一个脚本需要在 Powershell v2.0 和 v3.0 上运行它导入一个 csv 文件并仅从第一行读取特定值。csv 文件可以有单行值或多个值。

$file_data = Import-csv -Path $file_name

$col5 = "ColumnName"

...

然后$file_data[0].$col5在一些语句中使用

这是Import-csvPowershell v2.0 和 v3.0 之间的行为差​​异

  1. 在 Powershell v2.0 上,当 csv 文件中有单行时,Import-csv 返回一个非数组 PSObject 对象。所以,上面的行会抛出一个错误 "CannotIndex" $file_data。但是当你在 csv 中有多行时,Powershell v2.0 可以正常工作。

  2. 在 Powershell v3.0 上,Import-csv 总是返回一个数组,所以索引不是问题。

但是,如果我删除索引并仅使用 $file_data.$col5,则当 csv 具有多行时,Powershell v2.0 将不会显示任何数据。

我在这里错过了一些东西。应该有一种优雅的方式来处理它。

4

1 回答 1

2

为什么不用总是返回一个的符号将import-csvcmdlet括起来,即使是单个值并且在 V2 和 V3 中也有效?@()array

$file_data = @(Import-csv -Path $file_name)
于 2013-09-19T07:54:56.907 回答