如何导入CSV列? Import-Csv无法按计划运行

时间:2015-09-15 16:40:07

标签: powershell csv windows-7

我有一个由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选项指定所有标头,否则导入选项不起作用。我收到这个错误:

enter image description here

通过添加所有标题正确导入后,我无法将$customers.name保存到$List变量中,无论是否排序。但是,如果我提供索引号(ex $customers[2].name),它就可以。

要解决此问题,我在[{1}}之后使用以下选项查看了测量CSV行数的方法:

$customers

$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 。如果可能的话我想不包括标题。我还在CSV的末尾有一行,其中包含其他信息,但没有名称。这显示为一个空白行。如果可能的话,我也希望将其删除。

1 个答案:

答案 0 :(得分:2)

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

要在v2中解决此限制问题,您需要在排序前展开属性:

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