Dela via


Om Switch

KORT BESKRIVNING

Förklarar hur du använder en växel för att hantera flera If-instruktioner.

LÅNG BESKRIVNING

Om du vill kontrollera ett villkor i ett skript eller en funktion använder du en If -instruktion. Instruktionen If kan kontrollera många typer av villkor, inklusive värdet för variabler och egenskaperna för objekt.

Om du vill kontrollera flera villkor använder du en Switch -instruktion. -instruktionen Switch motsvarar en serie If-instruktioner, men det är enklare. Instruktionen Switch visar varje villkor och en valfri åtgärd. Om ett villkor hämtar utförs åtgärden.

-instruktionen Switch använder också den $switch automatiska variabeln. Mer information finns i about_Automatic_Variables.

En grundläggande Switch instruktion har följande format:

Switch (<test-value>)
{
    <condition> {<action>}
    <condition> {<action>}
}

Följande Switch instruktion jämför till exempel testvärdet 3 med vart och ett av villkoren. När testvärdet matchar villkoret utförs åtgärden.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
}
It is three.

I det här enkla exemplet jämförs värdet med varje villkor i listan, även om det finns en matchning för värdet 3. Följande Switch instruktion har två villkor för värdet 3. Det visar att som standard testas alla villkor.

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."}
    4 {"It is four."}
    3 {"Three again."}
}
It is three.
Three again.

Om du vill dirigera Switch till sluta jämföra efter en matchning använder du -instruktionen Break . - Break instruktionen avslutar -instruktionen Switch .

switch (3)
{
    1 {"It is one."}
    2 {"It is two."}
    3 {"It is three."; Break}
    4 {"It is four."}
    3 {"Three again."}
}
It is three.

Om testvärdet är en samling, till exempel en matris, utvärderas varje objekt i samlingen i den ordning som det visas. I följande exempel utvärderas 4 och sedan 2.

switch (4, 2)
{
    1 {"It is one." }
    2 {"It is two." }
    3 {"It is three." }
    4 {"It is four." }
    3 {"Three again."}
}
It is four.
It is two.

Alla Break instruktioner gäller för samlingen, inte för varje värde, som du ser i följande exempel. - Switch instruktionen avslutas av -instruktionen Break i villkoret för värde 4.

switch (4, 2)
{
    1 {"It is one."; Break}
    2 {"It is two." ; Break }
    3 {"It is three." ; Break }
    4 {"It is four." ; Break }
    3 {"Three again."}
}
It is four.

Syntax

Den fullständiga Switch instruktionssyntaxen är följande:

switch [-regex|-wildcard|-exact][-casesensitive] (<value>)
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

eller

switch [-regex|-wildcard|-exact][-casesensitive] -file filename
{
    "string"|number|variable|{ expression } { statementlist }
    default { statementlist }
}

Om inga parametrar används Switch utför en skiftlägesokänslig exakt matchning för värdet. Om värdet är en samling utvärderas varje element i den ordning som det visas.

-instruktionen Switch måste innehålla minst en villkorssats.

Satsen Default utlöses när värdet inte matchar något av villkoren. Det motsvarar en Else -sats i en If -instruktion. Endast en Default -sats tillåts i varje Switch -instruktion.

Switch har följande parametrar:

Parameter Beskrivning
Jokertecken Anger att villkoret är en jokerteckensträng.
Om matchningssatsen inte är en sträng är parametern
Ignoreras.
Exakta Anger att matchningssatsen, om det är en sträng, måste
matchar exakt. Om matchningssatsen inte är en sträng, den här parametern
ignoreras.
Skiftlägeskänsligt Utför en skiftlägeskänslig matchning. Om matchningssatsen inte är
en sträng ignoreras den här parametern.
Fil Tar indata från en fil i stället för en värdesats. Om
flera filparametrar inkluderas, endast den sista är
Används. Varje rad i filen läse och utvärderas av
Switch Uttalande.
Regex Utför matchning av reguljära uttryck för värdet till
Villkor. Om alternativet
match-satsen är inte en sträng. Den här parametern ignoreras.

Anteckning

När du anger värden i konflikt, till exempel Regex och Jokertecken, har den senast angivna parametern företräde och alla motstridiga parametrar ignoreras. Flera instanser av parametrar tillåts också. Men endast den sista parametern som används är effektiv.

I det här exemplet finns det inget matchande fall, så det finns inga utdata.

switch ("fourteen")
{
    1 {"It is one."; Break}
    2 {"It is two."; Break}
    3 {"It is three."; Break}
    4 {"It is four."; Break}
    "fo*" {"That's too many."}
}

Genom att lägga till Default -satsen kan du utföra en åtgärd när inga andra villkor lyckas.

switch ("fourteen")
{
    1 {"It is one."; Break}
    2 {"It is two."; Break}
    3 {"It is three."; Break}
    4 {"It is four."; Break}
    "fo*" {"That's too many."}
    Default {
        "No matches"
    }
}
No matches

För att ordet "fjorton" ska matcha ett fall måste du använda parametern -Wildcard eller -Regex .

   PS> switch -Wildcard ("fourteen")
       {
           1 {"It is one."; Break}
           2 {"It is two."; Break}
           3 {"It is three."; Break}
           4 {"It is four."; Break}
           "fo*" {"That's too many."}
       }
That's too many.

I följande exempel används parametern -Regex .

$target = 'user@contoso.com'
switch -Regex ($target)
{
    'ftp\://.*' { "$_ is an ftp address"; Break }
    '\w+@\w+\.com|edu|org' { "$_ is an email address"; Break }
    'http[s]?\://.*' { "$_ is a web address"; Break }
}
user@contoso.com is an email address

Ett Switch instruktionsvillkor kan vara något av följande:

  • Ett uttryck vars värde jämförs med indatavärdet
  • Ett skriptblock som ska returneras $true om ett villkor uppfylls. Skriptblocket tar emot det aktuella objektet som ska jämföras i den $_ automatiska variabeln och utvärderas i sitt eget omfång.

Åtgärden för varje villkor är oberoende av åtgärderna i andra villkor.

I följande exempel visas användningen av skriptblock som Switch instruktionsvillkor.

switch ("Test")
{
    {$_ -is [String]} {
        "Found a string"
    }
    "Test" {
        "This executes as well"
    }
}
Found a string
This executes as well

Om värdet matchar flera villkor körs åtgärden för varje villkor. Om du vill ändra det här beteendet använder du nyckelorden Break eller Continue .

Nyckelordet Break stoppar bearbetningen och avslutar -instruktionen Switch .

Nyckelordet Continue slutar bearbeta det aktuella värdet, men fortsätter att bearbeta efterföljande värden.

I följande exempel bearbetas en matris med tal och visas om de är udda eller jämna. Negativa tal hoppas över med nyckelordet Continue . Om ett icke-tal påträffas avslutas körningen med nyckelordet Break .

switch (1,4,-1,3,"Hello",2,1)
{
    {$_ -lt 0} { Continue }
    {$_ -isnot [Int32]} { Break }
    {$_ % 2} {
        "$_ is Odd"
    }
    {-not ($_ % 2)} {
        "$_ is Even"
    }
}
1 is Odd
4 is Even
3 is Odd

SE ÄVEN

about_Break

about_Continue

about_If

about_Script_Blocks