ホームに戻る
出典 :
目次 :
PowerShellにおける比較演算子
演算子 | 概要 | 他言語の 相当する演算子 | 例(条件式の部分のみ) |
C系 | VB |
-eq | 等しい (=) | equal to | == | = | $_Name -eq "wgalog" |
-ne | 等しくない (≠) | not equal to | != | <> | $_Name -ne "wgalog" |
-gt | より大きい (>) | greater than | > | $_Length -gt 1MB |
-ge | 以上 (≧) | greater than or equal to | >= | $_Length -ge 1MB |
-lt | 未満 (<) | less than | | $_Length -lt 1MB |
-le | 以下 (≦) | less than or equal to | <= | $_Length -le 1MB |
-like | あいまい検索 (ワイルドカード) | | $_Name -like "*.log" |
-match | 正規表現検索 | | $_Name -match "[a-z]{1,}\.log" |
PowerShellにおける論理演算子
演算子 | 概要 | 他言語の 相当する演算子 | 例 |
C系 | VB |
-and | 論理積(AND) | && | AND | (1 -eq 1) -and (1 -eq 2) |
-or | 論理和(OR) | || | OR | (1 -eq 1) -or (1 -eq 2) |
-xor | 排他的論理和(XOR) | | (1 -eq 1) -xor (1 -eq 2) |
-not ! | 否定(NOT) | ! | NOT | -not (1 -eq 2) !(1 -eq 2) |
単純分岐(if - elseif - else 節)
$x = 100
# $x >= 80 の場合 : if 節
if ($x -ge 80)
{
Write-Output '変数 $x は80以上です。'
}
# 上記以外で、$x >= 40 の場合 : elseif 節
elseif ($x -ge 40)
{
Write-Output '変数 $x は40以上80未満です。'
}
# 上記以外の場合 : else 節
else
{
Write-Output '変数 $x は40未満です。'
}
多岐分岐(switch 節)
C系言語の switch - case 、VBの select - case 節に相当。
$x = 1
# 変数 $x の値によって分岐
switch($x)
{
# $x -eq 1 の場合
1 {
Write-Output '変数 $x は1です。'
break
}
# $x -eq 2 の場合
2 {
Write-Output '変数 $x は2です。'
break
}
# $x -eq 3 の場合
3 {
Write-Output '変数 $x は3です。'
break
}
# それ以外
default {
Write-Output '変数 $x は1、2、3ではありません。'
}
}
break を記述することで、個別のブロック(case 節に相当)を実行後 switch 節を抜けるようになる。
break を省略すると switch 節を継続するため、条件に適合するブロックが他にも存在する場合そちらも実行される。
$x = 1
# 変数 $x の値によって分岐
switch($x)
{
# $x -eq 1 の場合 (break 無し)
1 {
Write-Output '変数 $x は1です。'
}
# $x -eq 1 の場合 (ひとつ上のブロックに break が無いため、このブロックも実行される)
1 {
Write-Output '変数 $x は1です。(わかってます)'
}
# $x -eq 3 の場合
3 {
Write-Output '変数 $x は3です。'
}
# それ以外
default {
Write-Output '変数 $x は1、2、3ではありません。'
}
}
実行結果
変数 $x は1です。
変数 $x は1です。(わかってます)
ループ構文
for 節
C系言語の for 節と同様。初期条件・継続条件・増分式を for 文に記述する。
# 配列 $ary を初期化
$ary = @(100, 120, 300)
# for 節
# ループ制御変数として $i を使用、$i < 3 の間ブロックの実行を繰り返す
for($i = 0; $i -lt 3; $i++)
{
# 変数 $sum に $ary[$i] の値を加算
$sum += $ary[$i];
}
# 変数 $sum の値を出力
Write-Output $sum
実行結果
520
範囲ベース for
C#などの foreach 節と同様。コレクション(集合)の全要素を順に走査して処理できる。
foreach文を使用する場合
# 配列 $ary を初期化
$ary = @(100, 120, 300)
# foreach 節
# $ary[] の値を順に $dat (一時変数)に格納
foreach($dat in $ary)
{
# 変数 $sum に $dat の値を加算
$sum += $dat;
}
# 変数 $sum の値を出力
Write-Output $sum
実行結果
520
ForEach-Object コマンドレットを使用する場合
foreach文を使用するよりもリソース消費が少ない。
# 配列 $ary を初期化
$ary = @(100, 120, 300)
# ForEach-Object 節
# $ary[] の値は順に $_ (自動変数)に格納される
$ary | ForEach-Object
{
# 変数 $sum に自動変数の値を加算
$sum += $_;
}
# 変数 $sum の値を出力
Write-Output $sum
実行結果
520
while / do ~ while 節
C系言語の while / do ~ while 節と同様。継続条件を満たしている間、ループを繰り返す。
do ~ wihle 節は、継続条件を満たしているかに関わらず、必ず一回はループの処理を行う。
while 節
$i = 0;
$sum = 0;
$ary = @(100, 120, 300)
# 変数 $i < 3 の間、ループを継続
while($i -lt 3)
{
$sum += $ary[$i];
$i++;
}
Write-Output $sum
do ~ while 節
$i = 0;
$sum = 0;
$ary = @(100, 120, 300)
do
{
$sum += $ary[$i];
$i++;
} while($i -lt 3) #< 変数 $i < 3 の間、ループを継続
Write-Output $sum