Kontrola a použití konstruktoru Switch ve skriptech Windows PowerShellu
Konstruktor Switch je podobný konstruktoru If , který má více oddílů ElseIf . Konstruktor Switch vyhodnotí jednu proměnnou nebo položku proti více hodnotám a má blok skriptu pro každou hodnotu. Blok skriptu pro každou hodnotu se spustí, pokud tato hodnota odpovídá proměnné. K dispozici je také výchozí oddíl, který se spustí jenom v případě, že neexistují žádné shody.
Konstruktor Switch používá následující syntaxi:
Switch ($choice) {
1 { Write-Host "You selected menu item 1" }
2 { Write-Host "You selected menu item 2" }
3 { Write-Host "You selected menu item 3" }
Default { Write-Host "You did not select a valid option" }
}
Kromě odpovídajících hodnot lze konstruktor Switch použít také ke porovnávání vzorů. Pomocí parametru -wildcard můžete provést porovnávání vzorů pomocí stejné syntaxe jako operátor -like . Alternativně můžete použít parametr -regex k provedení porovnávání pomocí regulárních výrazů.
Je důležité si uvědomit, že když používáte porovnávání vzorů, je možné použít více shod. Pokud existuje více shod, spustí se bloky skriptu pro všechny odpovídající vzory. To se liší od konstruktoru If , ve kterém je spuštěn pouze jeden blok skriptu.
Následující příklad používá porovnávání vzorů:
Switch -WildCard ($ip) {
"10.*" { Write-Host "This computer is on the internal network" }
"10.1.*" { Write-Host "This computer is in London" }
"10.2.*" { Write-Host "This computer is in Vancouver" }
Default { Write-Host "This computer is not on the internal network" }
}
U hodnot v sítích $ip Londýn nebo Vancouver se zobrazí dvě zprávy. Pokud $ip obsahuje IP adresu v síti 10.x.x.x.x, zprávy budou indikovat, že počítač je v interní síti a že počítač je v Londýně nebo Vancouveru. Pokud $ip není IP adresa v síti 10.x.x.x,x, zpráva indikuje, že není v interní síti.
Pokud do konstruktoru Switch zadáte více hodnot, vyhodnotí se každá položka v matici. Pokud by proměnná $ip byla v předchozím příkladu pole se dvěma IP adresami, zpracují se obě IP adresy. Akce vhodné pro každou položku v poli by se provedly.