Powershell Switch语句具有多个值

任何人都知道我可以如下面的例子有多个可能的值的switch语句?

switch ($myNumber) { 1 3 5 7 9 { write-host "Odd" } 2 4 6 8 10 {write-host "Even" } } 

在VBScript中使用起来很简单,所以我相信我只是缺less一些简单的东西。

例如在VBScript中

 Select Case myNumber Case 1,3,5,7,9 MsgBox "Odd" Case 2,4,6,8,10 MsgBox "Even" End Select 

提前欢呼,

 $myNumber = 3 $arrA = 1, 3, 5, 7, 9 $arrB = 2, 4, 6, 8, 10 switch ($myNumber) { {$arrA -contains $_} { write-host "Odd" } {$arrB -contains $_} { write-host "Even" } } 

在你的情况下,你可以简单地使用

 switch ($myNumber) { { $_ % 2 -eq 1 } { "Odd" } { $_ % 2 -eq 0 } { "Even" } } 

一个实际的尝试来模拟你可以在VB中做什么可能会是类似的

 switch ($myNumber) { { 1,3,5,7,9 -contains $_ } { "Odd" } { 2,4,6,8,10 -contains $_ } { "Even" } } 

为了完整性添加这个…

上面的VB脚本最接近的PowerShell代码是:

 PS C:\> switch (1) { {$_ -eq 1 -or $_ -eq 3 -or $_ -eq 5 -or $_ -eq 7 -or $_ -eq 9} { "Odd"} {$_ -eq 2 -or $_ -eq 4 -or $_ -eq 6 -or $_ -eq 8 -or $_ -eq 10} { "Even"} } Odd PS C:\VSProjects\Virtus\App_VM> switch (2) { {$_ -eq 1 -or $_ -eq 3 -or $_ -eq 5 -or $_ -eq 7 -or $_ -eq 9} { "Odd"} {$_ -eq 2 -or $_ -eq 4 -or $_ -eq 6 -or $_ -eq 8 -or $_ -eq 10} { "Even"} } Even 

因为VB脚本Select Case通过OR操作

 Select Case testexpression [Case expressionlist-n [statements-n]] . . . [Case Else [elsestatements-n]] End Select 

“如果testexpression与任何Caseexpression式expression式相匹配,Case子句之后的语句将被执行到下一个Case子句…” Select Case Statement

我无法想象的有趣的事情是这样的结果:

 PS C:\> switch (1) { {1 -or 3 -or 5 -or 7 -or 9} { "Odd"} {2 -or 4 -or 6 -or 8 -or 10} { "Even"} } Odd Even 

如何使用正则expression式的一个简单的替代?

 switch -regex ($myNumber) { "^[13579]$" { Write-Host "Odd" } "^([2468]|10)$" { Write-Host "Even" } default { Write-Host "Other" } }