如何导入 CSV 列? Import-Csv 没有按计划工作

How to import CSV column? Import-Csv not working as planned

我有一个由 CSV 文件填充的下拉列表。 CSV 中有很多列,但它只从 Name 列中提取。这是我所拥有的,在大多数 Win 7 和我试过的所有 Win 8+ PC 上都运行良好。

$customers = Import-CSV "$dir\Apps\customers.csv"
$List = $customers.name | Sort-Object

之后有一个 ForEach 循环将列表中的每个项目放入菜单。

最近我注意到一些我无法弄清楚的 Win 7 PC 问题。导入选项不起作用,除非我用 -Header 选项指定所有 header。我收到此错误:

通过添加所有 header 使其正确导入后,无论是否进行排序,我都无法将其保存 $customers.name$List 变量中。但是,如果我提供一个索引号(例如 $customers[2].name),它就可以工作。

为了解决这个问题,我研究了通过在 $customers 之后使用以下选项来测量 CSV 中的行数的方法:

$csvlength = Get-Content "$dir\Apps\customers.csv" | Measure-Object - lines

$csvlength = Import-CSV "$dir\Apps\customers.csv" | Measure-Object

从那里我可以通过查看 $csvlength.lines$csvlength.count 查看长度。

有没有办法使用该信息将姓名列表保存到 $List 中?我试过类似的方法但没有成功:

$List = $customers[0-$csvlength.count] | Sort-Object

此外,我注意到在导入 header 时,它在列表中包含 Name。如果可能的话,我不想包括 header。我在 CSV 的末尾还有一行,其中包含其他信息,但没有名称。这显示为一个空行。如果可能的话,我也希望将其删除。

PowerShell v2 $array.Foo 只允许访问数组对象本身的 属性 Foo,不允许访问数组 属性 Foo 元素。允许通过数组变量访问元素属性是 PowerShell v3 引入的主要更改之一。

要解决 v2 中的此限制,您需要在排序前扩展 属性:

$List = $customers | Select-Object -Expand name | Sort-Object