Instruction Powershell Switch avec plusieurs valeurs

11

Quelqu'un sait comment je peux avoir une instruction switch avec plusieurs valeurs possibles comme l'exemple ci-dessous?

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

Auparavant, c'était facile dans VBScript, donc je suis sûr qu'il me manque quelque chose de simple.

par exemple dans VBScript

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

Bravo à l'avance,

Ben

Ben
la source

Réponses:

11
$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" }
}
Torai
la source
+1 L'utilisation de -eq au lieu de -contains est encore meilleure.
Bernie White
11

Dans votre cas, vous pouvez simplement utiliser

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

Une tentative réelle de modéliser ce que vous pouvez y faire dans VB serait probablement quelque chose comme

switch ($myNumber) {
  { 1,3,5,7,9  -contains $_ } { "Odd" }
  { 2,4,6,8,10 -contains $_ } { "Even" }
}
Joey
la source
J'aime mieux celui-ci car il est plus familier avec les instructions de commutation traditionnelles.
Mark Henderson
0

Ajouter ceci pour être complet ...

Le code PowerShell le plus proche du script VB ci-dessus est:

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

Parce que le script VB Select Case fonctionne via un OU

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

"Si testexpression correspond à une expression de liste d'expressions Case, les instructions suivant cette clause Case sont exécutées jusqu'à la clause Case suivante ..." Select Case Statement

La chose intéressante que je n'ai pas pu comprendre est ce résultat:

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 
Christopher_G_Lewis
la source
0

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

Jindra
la source
-1

Que diriez-vous de cela pour une alternative facile en utilisant regex ?

switch -regex ($myNumber)
{
   "^[13579]$"     { Write-Host "Odd" }
   "^([2468]|10)$" { Write-Host "Even" }
   default         { Write-Host "Other" }
}
Simon
la source
1
-1 pour la |10pièce.
Deer Hunter