Om Switch
Kort beskrivning
Beskriver 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 den är enklare. Instruktionen Switch
visar varje villkor och en valfri åtgärd. Om ett villkor hämtar utförs åtgärden.
-instruktionen Switch
$_
kan använda och $switch
automatiska variabler. 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
fungerar samma sak som med hjälp av exact-parametern. Den utför en skiftlägesokänslig 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:
- Jokertecken – anger att villkoret är en sträng med jokertecken. Om matchningssatsen inte är en sträng ignoreras parametern. Jämförelsen är skiftlägesokänslig.
- Exact – anger att matchningssatsen, om den är en sträng, måste matcha exakt. Om matchningssatsen inte är en sträng ignoreras den här parametern. Jämförelsen är skiftlägesokänslig.
- CaseSensitive – utför en skiftlägeskänslig matchning. Om matchningssatsen inte är en sträng ignoreras den här parametern.
- File – Tar indata från en fil i stället för en värdesats. Om flera filparametrar ingår används bara den sista. Varje rad i filen läse och utvärderas av -instruktionen
Switch
. Jämförelsen är skiftlägesokänslig. - Regex – utför matchning av reguljära uttryck för värdet till villkoret. Om matchningssatsen inte är en sträng ignoreras den här parametern.
Jämförelsen är skiftlägesokänslig. Den
$matches
automatiska variabeln är tillgänglig för användning i matchande instruktionsblock.
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 skickas ett objekt som inte är en sträng eller numeriska data till Switch
. Switch
utför ett strängkonvertering på objektet och utvärderar resultatet.
$test = @{
Test = 'test'
Test2 = 'test2'
}
$test.ToString()
switch -Exact ($test)
{
'System.Collections.Hashtable'
{
'Hashtable string coercion'
}
'test'
{
'Hashtable value'
}
}
System.Collections.Hashtable
Hashtable string coercion
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 = 'https://bing.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 that uses $($matches[1])"; Break }
}
https://bing.com is a web address that uses https
Ett villkor för Switch-instruktionen 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.
Den $_
automatiska variabeln innehåller det värde som skickas till switch-instruktionen och är tillgänglig för utvärdering och användning inom villkorsinstruktionernas 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 Test 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