我有一个由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
选项指定所有标头,否则导入选项不起作用。我收到这个错误:
通过添加所有标题正确导入后,我无法将$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的末尾有一行,其中包含其他信息,但没有名称。这显示为一个空白行。如果可能的话,我也希望将其删除。
答案 0 :(得分:2)
PowerShell v2 $array.Foo
仅允许访问数组对象本身的属性Foo
,而不允许访问数组元素的属性Foo
。允许通过数组变量访问元素属性是PowerShell v3引入的主要更改之一。
要在v2中解决此限制问题,您需要在排序前展开属性:
$List = $customers | Select-Object -Expand name | Sort-Object