我正在尝试使用开关命令从数组中select一些东西。 数组可以根据来自另一个电子表格的信息更改大小。
例如:
C:\> $Test = A C:\> $ListA Item_One Item_Two -------- -------- A 1 B 2 C 3
我想创build一个开关,当$Test被检查$ListA.Item_One时,将返回Item_Two的对应值。 我遇到的问题是$ListA可以根据情况更改值的数量。 我在想的switch语句是这样的:
switch ($Test) { $ListA.Item_One {write-host $ListA.Item_two} default {"Not found"} }
当我运行这个代码,它只是在默认情况下,我不能得到它触发$ListA.Item_One部分。 有没有办法做到这一点,或者我该怎么做我想做的事情? 我知道我可以使用for-each循环,但是我正在查看是否有其他方法。 我可以想象,如果这个清单很大,筛选需要很长时间。 目前这个清单只有5-10个项目,但在一年内可能会增长到40多个。
编辑:我通过.csv填充列表:
$listA = Import C:\File.csv
用你所做的,$ listA没有名为“Item_One”的元素,所以expression式实际上是NULL
这是一个数组,如果你想从$ listA中得到“A”,你需要使用$ listA [0] .Item_One和$ ListA [0] .Item_two
不知道更多关于这种情况不完全确定什么build议…
你真的有这么多的项目,你需要一个CSV?
如果不尝试一个哈希表
PS C:\temp> $listA = import-csv .\list.csv PS C:\temp> $listA Item_One Item_Two -------- -------- A 1 B 2 C 3 PS C:\temp> $listA.gettype() IsPublic IsSerial Name BaseType -------- -------- ---- -------- True True Object[] System.Array PS C:\temp> $listA.Item_One PS C:\temp> $listA[0].Item_One A PS C:\temp> switch ($Test) >> { >> $listA[0].Item_One {write-host $ListA[0].Item_two} >> default {"Not found"} >> } >> 1 # Hash table example $hash=@{"A"=1;"B"=2;"C"=3} $hash.A 1
我不认为案例/开关结构适合这种情况。 这似乎会做你所需要的。
$listA | foreach { if ($_.item_one -eq "A") { # do something write-host $_.item_two } elseif ($_.item_one -eq "B") { # do something different write-host $_.item_two } else { $found = $false } } if ($found -eq $false) { write-host "default" }
IF条款也可以按照你的需要来开始
if ($_.item_one -match "A|B|C") {