94 votes

Quelle est la syntaxe PowerShell pour plusieurs valeurs dans une instruction switch ?

Je veux essentiellement faire ça :

switch($someString.ToLower())
{
    "y", "yes" { "You entered Yes." }
    default { "You entered No." }
}

6voto

Doug Finke Points 2971

Supporte la saisie de y|ye|yes et ne tient pas compte de la casse.

switch -regex ($someString.ToLower()) {
        "^y(es?)?$" {
            "You entered Yes." 
        }
        default { "You entered No." }
}

13 votes

En fait, votre expression "[yes]" correspond à toute occurrence des caractères "y", "e" ou "s" dans $someString. Même si $someString est "no ! no ! no!s", ce bloc switch retournera "You entered Yes." à cause du "s" de fin. Pour correspondre à y|ye|yes, l'expression doit être "^y(es ?)?$".

-3voto

SmartieMcfly Points 5

Le commutateur ne semble pas être sensible à la casse dans PowerShell 5.1. Les quatre $someString Les exemples ci-dessous fonctionnent.

$someString = "YES"
$someString = "yes"
$someString = "yEs"
$someString = "y"

switch ($someString) {
   {"y","yes"} { "You entered Yes." }
   Default { "You didn't enter Yes."}
}

Voici mon $PSVersionTable données.

Name                           Value
----                           -----
PSVersion                      5.1.17763.771
PSEdition                      Desktop
PSCompatibleVersions           {1.0, 2.0, 3.0, 4.0...}
BuildVersion                   10.0.17763.771
CLRVersion                     4.0.30319.42000
WSManStackVersion              3.0
PSRemotingProtocolVersion      2.3
SerializationVersion           1.1.0.1

1 votes

C'est une mauvaise réponse. La bonne réponse pourrait être la suivante : $a = 'b' ; switch ($a) {$_ -in 'a', 'b'} {'bingo'} ; default {'nope!'} }

-4voto

Daniel Points 1

Après avoir cherché une solution au même problème que vous, j'ai trouvé ce petit sujet ici. En avance j'ai obtenu une solution beaucoup plus fluide pour ce switch, case statement

switch($someString) #switch is caseINsensitive, so you don't need to lower
{
    { 'y' -or 'yes' } { "You entered Yes." }
    default { "You entered No." }
}

4 votes

{'y' -ou 'yes'} évalue toujours à true donc la branche par défaut n'est jamais touchée

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X