我有一个对象数组,当我试图过滤它时,它没有返回预期的数据。
数据:
Date Batch
---- -----
04/08/2008 1
04/08/2008 2
04/08/2008 3
04/08/2008 10
04/08/2008 11
我代码:
$table = @{}
$table = import-csv e:report.csv
Foreach($item in $table.GetEnumerator())
{
If (($item.date -eq '4/8/2008') -and ($item.batch -le 100) )
{
$item
}
}
我希望它返回所有项目,但我只得到:
Date Batch
---- -----
04/08/2008 1
04/08/2008 10
我错过了什么?
我错过了什么?
字符串不是数字的事实: -)Import-Csv
将所有列值视为字符串,因此您将字符串"3"
与100
进行比较,而不是数字3
-并且按字母顺序,100
先于3
(第一个字符"1"
vs第一个字符"3"
)。
将$item.batch
转换为数字类型:
foreach($item in Import-Csv E:report.csv)
{
If (($item.date -eq '4/8/2008') -and ([int]$item.batch -le 100) )
{ # Look, here
$item
}
}
…或者,翻转操作数,使数值引用值(100
)为左侧参数:
If (($item.date -eq '4/8/2008') -and (100 -gt $item.batch) )
这将导致PowerShell在比较
之前将$item.batch
转换为数值类型