Comando Powershell Switch com vários valores

10

Alguém sabe como posso ter uma instrução switch com vários valores possíveis, como o exemplo abaixo?

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

Costumava ser fácil no VBScript, por isso tenho a certeza que só sinto falta de algo simples.

por exemplo, em VBScript

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

Cheers antecipadamente,

Ben

    
por Ben 14.07.2010 / 11:59

4 respostas

10
$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" }
}
    
por 14.07.2010 / 12:38
10

No seu caso, você pode simplesmente usar

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

Uma tentativa real de modelar o que você pode fazer lá no VB provavelmente seria algo como

switch ($myNumber) {
  { 1,3,5,7,9  -contains $_ } { "Odd" }
  { 2,4,6,8,10 -contains $_ } { "Even" }
}
    
por 14.07.2010 / 12:37
0

Adicionando isso para completar ...

O código PowerShell mais próximo do script VB acima é:

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

Porque o script VB Select Case opera por meio de um OR

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

"Se testexpression corresponder a qualquer expressão expression expression, as instruções que seguem essa cláusula Case são executadas até a próxima cláusula Case ..." Selecione a declaração do caso

A coisa interessante que não consegui descobrir é esse resultado:

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 
    
por 30.08.2017 / 18:05
-1

Que tal isso para uma alternativa fácil usando regex ?

switch -regex ($myNumber)
{
   "^[13579]$"     { Write-Host "Odd" }
   "^([2468]|10)$" { Write-Host "Even" }
   default         { Write-Host "Other" }
}
    
por 09.01.2015 / 01:16

Tags