Powershell 如何导入CSV列?导入Csv未按计划工作

Powershell 如何导入CSV列?导入Csv未按计划工作,powershell,csv,windows-7,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循环将列表中的每个项目放入菜单 最近我注意到一对夫妇赢了7台个人电脑的问题,我想不出来。除非我使用-Header选项指定所有的头,否则

我有一个由CSV文件填充的下拉列表。CSV中有许多列,但它仅从
Name
列中提取。这是我所拥有的,在大多数Win 7和Win 8+PC中都能正常工作,我已经试过了

$customers = Import-CSV "$dir\Apps\customers.csv"
$List = $customers.name | Sort-Object
之后,有一个
ForEach
循环将列表中的每个项目放入菜单

最近我注意到一对夫妇赢了7台个人电脑的问题,我想不出来。除非我使用
-Header
选项指定所有的头,否则导入选项不起作用。我得到这个错误:

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

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

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

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

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

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

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

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

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

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

您使用的powershell版本是什么?我这样问是因为我认为Windows7仍然包含了Powershell 2.0,然后你可以安装一个更新来获得Powershell 3.0。2.0和3.0之间的差异会导致您描述的一些问题。我将说2.0。这是一个帮助安装新电脑的脚本,因此它必须在没有任何windows或powershell更新的情况下工作。我已经在其他(已经在生产中的)win 7 PC上运行了这个脚本,甚至一些win xp上也运行了这个脚本,下拉菜单可以正常工作。可能是因为这些都是最新的。现在我正在一台PC上测试它,我刚刚安装了一个新的7版本。是的,好的。在PowerShell 2.0中,您要么需要执行$customers[2].name,要么可以执行foreach循环,比如(foreach($c In$customers){$c.name}直到3.0,您才可以执行$customers.name,并希望它自动为您迭代。谢谢!这对下拉列表有效。但现在autocomplete不起作用,当我单击“Go”时什么都没有发生…我会玩它,如果需要,我会发布另一个问题。请不要移动目标。如果你有新问题:发布新问题。明白了,谢谢你的帮助。我让它再次工作,除了自动完成。
$List = $customers | Select-Object -Expand name | Sort-Object