Delen via


Over Switch

KORTE BESCHRIJVING

Hierin wordt uitgelegd hoe u een switch gebruikt om meerdere If-instructies af te handelen.

LANGE BESCHRIJVING

Als u een voorwaarde in een script of functie wilt controleren, gebruikt u een If -instructie. Met If de instructie kunnen veel soorten voorwaarden worden gecontroleerd, waaronder de waarde van variabelen en de eigenschappen van objecten.

Als u meerdere voorwaarden wilt controleren, gebruikt u een Switch -instructie. De Switch instructie is gelijk aan een reeks If-instructies, maar is eenvoudiger. De Switch instructie bevat elke voorwaarde en een optionele actie. Als een voorwaarde wordt verkregen, wordt de actie uitgevoerd.

De Switch instructie maakt ook gebruik van de $switch automatische variabele. Zie about_Automatic_Variables voor meer informatie.

Een basisinstructie Switch heeft de volgende indeling:

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

Met de volgende Switch instructie wordt bijvoorbeeld de testwaarde, 3, vergeleken met elk van de voorwaarden. Wanneer de testwaarde overeenkomt met de voorwaarde, wordt de actie uitgevoerd.

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

In dit eenvoudige voorbeeld wordt de waarde vergeleken met elke voorwaarde in de lijst, ook al is er een overeenkomst voor de waarde 3. De volgende Switch instructie heeft twee voorwaarden voor een waarde van 3. Het laat zien dat standaard alle voorwaarden zijn getest.

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.

Gebruik de Break instructie om te Switch stoppen met vergelijken na een overeenkomst. Met Break de instructie wordt de Switch instructie beëindigd.

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.

Als de testwaarde een verzameling is, zoals een matrix, wordt elk item in de verzameling geëvalueerd in de volgorde waarin het wordt weergegeven. In de volgende voorbeelden worden 4 en vervolgens 2 geëvalueerd.

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.

Alle Break instructies zijn van toepassing op de verzameling, niet op elke waarde, zoals wordt weergegeven in het volgende voorbeeld. De Switch instructie wordt beëindigd door de Break -instructie in de voorwaarde van waarde 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

De syntaxis van de volledige Switch instructie is als volgt:

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

of

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

Als er geen parameters worden gebruikt, Switch wordt een niet-hoofdlettergevoelige exacte overeenkomst voor de waarde uitgevoerd. Als de waarde een verzameling is, wordt elk element geëvalueerd in de volgorde waarin het wordt weergegeven.

De Switch instructie moet ten minste één voorwaardeinstructie bevatten.

De Default component wordt geactiveerd wanneer de waarde niet overeenkomt met een van de voorwaarden. Dit komt overeen met een Else -component in een If -instructie. Er is slechts één Default component toegestaan in elke Switch instructie.

Switch heeft de volgende parameters:

Parameter Beschrijving
Wildcard Geeft aan dat de voorwaarde een tekenreeks met jokertekens is.
Als de overeenkomstcomponent geen tekenreeks is, is de parameter
Genegeerd.
Exact Geeft aan dat de overeenkomstcomponent, als het een tekenreeks is, moet
precies overeenkomen. Als de overeenkomstcomponent geen tekenreeks is, deze parameter
wordt genegeerd.
CaseSensitive Hiermee wordt een hoofdlettergevoelige overeenkomst uitgevoerd. Als de overeenkomstcomponent niet is
een tekenreeks is, wordt deze parameter genegeerd.
File Neemt invoer uit een bestand in plaats van een waarde-instructie. Als
meerdere bestandsparameters zijn opgenomen, alleen de laatste is
Gebruikt. Elke regel van het bestand wordt gelezen en geëvalueerd door de
Switch Verklaring.
Regex Voert een reguliere expressie uit die overeenkomt met de waarde
Voorwaarde. Als de optie
overeenkomstcomponent is geen tekenreeks. Deze parameter wordt genegeerd.

Notitie

Bij het opgeven van conflicterende waarden, zoals Regex en Jokerteken, heeft de laatste opgegeven parameter voorrang en worden alle conflicterende parameters genegeerd. Meerdere exemplaren van parameters zijn ook toegestaan. Alleen de laatst gebruikte parameter is echter effectief.

In dit voorbeeld is er geen overeenkomende case, dus er is geen uitvoer.

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."}
}

Door de Default -component toe te voegen, kunt u een actie uitvoeren wanneer er geen andere voorwaarden slagen.

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

Als u wilt dat het woord 'veertien' overeenkomt met een hoofdlettergebruik, moet u de -Wildcard parameter of -Regex gebruiken.

   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.

In het volgende voorbeeld wordt de -Regex parameter gebruikt.

$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

Een Switch instructievoorwaarde kan een van de volgende zijn:

  • Een expressie waarvan de waarde wordt vergeleken met de invoerwaarde
  • Een scriptblok dat moet worden geretourneerd $true als aan een voorwaarde wordt voldaan. Het scriptblok ontvangt het huidige object om te vergelijken in de $_ automatische variabele en wordt geëvalueerd in een eigen bereik.

De actie voor elke voorwaarde is onafhankelijk van de acties in andere voorwaarden.

In het volgende voorbeeld ziet u het gebruik van scriptblokken als Switch instructievoorwaarden.

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

Als de waarde overeenkomt met meerdere voorwaarden, wordt de actie voor elke voorwaarde uitgevoerd. Als u dit gedrag wilt wijzigen, gebruikt u de Break trefwoorden of Continue .

Het Break trefwoord stopt met verwerken en sluit de Switch instructie af.

Het Continue trefwoord stopt met het verwerken van de huidige waarde, maar blijft eventuele volgende waarden verwerken.

In het volgende voorbeeld wordt een matrix met getallen verwerkt en wordt weergegeven of deze oneven of even zijn. Negatieve getallen worden overgeslagen met het Continue trefwoord. Als er een niet-getal wordt aangetroffen, wordt de uitvoering beëindigd met het Break trefwoord.

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

ZIE OOK

about_Break

about_Continue

about_If

about_Script_Blocks