PowerShellのケースを切り替える
Switchは、複数のIf文と比較して実装が簡単で、コーディングが簡単です。 各文の下には複数の条件があり、そのうちの1つが満たされると、アクションが実行されます。Div>
無料のデータサイエンスコースを開始
Hadoop、データサイエンス、統計&その他
構文: /p>
完全な構文:
Switch ( <value> ) {
"String" | Number | Variable | { expression } { statementlist }
default { statementlist }
}
または
Switch -file {
"String" | Number | Variable | { expression } { statementlist }
default { statementlist }
}
PowerShellのスイッチケースのパラメータ
- 正規表現:正規表現とも呼ばれます。 条件の値に対して正規表現チェックを実行します。 正規表現を使用する場合、WildCardとExactは無視されます。 また、match句が文字列でない場合、このパラメータは無視されます。
- Wildcard:条件がワイルドカード文字列であることを示します。 ワイルドカードを使用する場合、RegexおよびExactは無視されます。 また、match句が文字列でない場合、このパラメータは無視されます。
- Exact:正確な文字列との一致を実行します。 Exactを使用すると、ワイルドカードとRegexは無視され、match句が文字列でない場合、このパラメータは無視されます。
- CaseSensitive:このパラメータは、渡された値と正確に一致する条件をチェックします(大文字と小文字を区別します)一致しない場合、このパラメータは無視されます。 また、文字列値も必要です。
- File:ファイルパスを文字列値ではなく入力値として取ります。 複数のファイルパラメータが渡された場合は、最後のものだけを取ります。 ファイルの各行は条件に対して読み取られ、評価され、条件が一致する場合はその値が実行されるか、書き込まれたメッセージが表示されます。
フローチャート
PowerShellでスイッチはどのように機能しますか?
図の上に示すように、任意の値(文字列、整数、浮動小数点または他のデータ型)、配列、ワイルドカード、ファイルなどがあるときはいつでも。 渡された後、条件の一致を1つずつ開始し、条件が一致すると、スクリプトはそのブロックを実行します。 複数の一致する値の場合、複数のscripsブロックが実行され、一致する値が見つからず、default conditionが指定されている場合は、そのブロックが実行されます。
PowerShellでのスイッチケースの例
与えられた例を見てみましょう:
例#1
1。 文字列を持つ単純なスイッチ関数、渡された整数値。
コード:
switch (3) {
1 {"One"}
2 {"Two"}
3 {"Three"}
}
出力:
コード:
switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}
出力:
switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}
switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}
switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}
switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}
switch("data"){
"abc"{"Abc executed"}
"xyz"{"Xyz Executed"}
"data"{"Data Executed"}
}
さて、パラメータが式と一致しない場合はどうなりますか。 以下に示す例として、5はいずれのスイッチケースとも一致しません。 この場合、出力はnullになります。コード
コード
コード:
switch (5) {
1 {"One"}
2 {"Two"}
3 {"Three"}
}
上記の問題を克服するために、defaultは指定する必要があり、パラメータのいずれも一致しないときにdefaultブロックが実行されます。
コード:
switch (5) {
1 {"One"}
2 {"Two"}
3 {"Three"}
default{"No Match Found"}
}
出力:
例2
与えられた例:
if/else if/elseとswitchの違い。 以下の例から、Switch関数を使用してスクリプトを書くのが簡単であることがわかります。コード
コード
コード:
$time = 3
if($time -eq 1){"It's 1 O'Clock"}
elseif ($time -eq 2) {"It's 2 O'Clock"}
elseif ($time -eq 3) {"It's 3 O'Clock"}
else {"No Match Found"}
$time = 3
switch ($time) {
1 {"It's 1 O'Clock"}
2 {"It's 2 O'Clock"}
3 {"It's 3 O'Clock"}
default{"No Match found"}
}
Output:
Execution time for both the methods.
Code:
$time = 3
Measure-Command {
if($time -eq 1){"It's 1 O'Clock"}
elseif ($time -eq 2) {"It's 2 O'Clock"}
elseif ($time -eq 3) {"It's 3 O'Clock"}
else {"No Match Found"}
}
TotalMilliseconds :
Code:
$time = 3
Measure-Command {
switch ($time) {
1 {"It's 1 O'Clock"}
2 {"It's 2 O'Clock"}
3 {"It's 3 O'Clock"}
default{"No Match found"}
}
}
TotalMilliseconds:p>
違い:31.3154ミリ秒
スイッチ内に大量のスクリプトや関数を書くと、この違いは膨大になります。
1. Regexパラメータを使用したSwitch
Regexがswitchに記載されている場合、渡された値で式を評価し、条件の一部が一致する場合、その操作を実行します。
以下の例を考えてみましょう。
コード:
Switch ("Donkey"){
"Dog" {"Dog is Mentioned"}
"Cat" {"Cat is Mentioned"}
"Don" {"Donkey is Mentioned"}
"key" {"Donkey is mentioned again"}
default {"Nothing is mentioned"}
}
出力:正規表現を追加した後、
コード:
Switch -Regex ("Donkey"){
"Dog" {"Dog is Mentioned"}
"Cat" {"Cat is Mentioned"}
"Don" {"Donkey is Mentioned"}
"key" {"Donkey is mentioned again"}
default {"Nothing is mentioned"}
}
出力:
2。 Wildcardパラメータを持つスイッチ
WildcardはLikeパラメータと同様に動作します。
コード:
$msg = "Error, WMI connection failed"
Switch -Wildcard ($msg) {
"Error*" {"WMI Error"}
"Warning*" {"WMI Warning"}
"Successful*" {"WMI Connection Successful"}
}
出力:
3。 正確なパラメータを持つスイッチ
正確な関数は、スイッチのデフォルトです。 あなたがそれを使用するかどうかは関係ありません。 ただし、2つのパラメータを同時に使用する場合は、最後のパラメータが優先されます。出力:
4. Switch with File Parameter
パラメータとしてスイッチへのファイルパスを直接指定することができます。 変数式を指定する代わりに、ファイルへのパスを指定してFileを使用できます。
コード:
Switch -Wildcard -File C:\temp\switchtest.txt {
"*Warning*"{Write-Warning $PSItem}
"*Error*"{Write-Error $PSItem}
}
出力:
current PSItemまたは__を使用して、現在のアイテムを操作できます。
5. Switch with CaseSensitive parameter
switchでCasesensitive parameterを使用する場合、条件は各文字ごとに正確に一致する必要があります。
コード:
switch -CaseSensitive ("Hello") {
"HeLlo" {"This is different HeLlo"}
Default {"This is not Matching"}
}
出力:
6。 単純な配列:
switch (10,12) {
9 { "Nine" }
10 { "Ten" }
11 {"Eleven"}
12 {"Twelve"}
Default {"None"}
}
出力:
配列オブジェクトを渡します
コード:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) {
"VM_Delete" {"VM Delete Operation"}
"VM_Create" {"VM Create Operation"}
"VM_Shutdown" {"VM Shutdown Operation"}
}
出力:
7。 Break condition
break conditionを指定すると、そのループ内で操作が中断され、それ以上の実行を続けることはできません。 これは、条件が満たされ、実行時間が速くなったときにそれ以上のステップをチェックしたくない場合に非常に便利です。
コード:
$VMOps = @(
"VM_Delete"
"VM_Create"
)
switch ($VMops) {
"VM_Delete" {
"VM Delete Operation"
break }
"VM_Create" {
"VM Create Operation"
break}
"VM_Shutdown" {
"VM Shutdown Operation"
break
}
}
出力: p>
気づいたら、実行されたブロックは一つだけで、switch関数から終了します。
8. Continue Condition
Continueパラメータは、特定の反復をスキップするために使用されます。 たとえば、一致する項目が3つある場合は最初に実行され、条件が一致すると他のステップをスキップして次のステップに移動します。
コード:
switch ('Hello') {
"hello" {'First Block Executes'
continue}
'HELLO' {'Second Block Executes'
continue }
'HeLLo' {'Third Block Exectues'
continue }
Default {'Nothing executed'}
}
出力:
あなたが見ることができるように渡された引数は一つだけです(’Hello’)、式が一致しており、実行する他の引数が残こんにちは、スク
- ブレークのもう一つの混合例とスイッチで続行します。
コード:
switch ('Alpha','Beta','Delta') {
"Alpha" {'First Block Executes'
continue}
'Beta' {'Second Block Executes'
break }
'Delta' {'This will not Execute'}
}
出力:
結論
全体として、Switchは複数のIf条件を実装するよりもはるかに優れており、より多くの機能と実行時間
推奨記事
これは、PowerShellでケースを切り替えるためのガイドでした。 ここでは、Powershellの構文、パラメーター、およびスイッチケースの例についても説明します。 詳細については、次の記事を参照してください-
- シェルスクリプトとは何ですか?
- PowerShellコマンド
- PowerShell演算子
- Powershellの使用
- 例とPowerShellの配列へのガイド
- PowerShellの正規表現の例
- シェルスクリプトで機能するための完全なガイド
- シェルスクリプトでエコーを学ぶ
- シェルスクリプトでスイッチケースの例
- Pythonスイッチケース|どのように実装するには?
Leave a Reply