WindowsPowerShell

PowerShellの条件分岐【if・elseif・else・switch文の書き方と比較演算子まとめ】

WindowsPowerShell
記事内に広告が含まれています。

PowerShellの条件分岐(if・elseif・else・switch)を学びます。バッチファイルのif文より格段に表現力が高く、複雑な条件も簡潔に書けます。

if・elseif・else文

$score = 78

if ($score -ge 90) {
    Write-Host "優"
} elseif ($score -ge 70) {
    Write-Host "良"  # ← これが実行される
} elseif ($score -ge 50) {
    Write-Host "可"
} else {
    Write-Host "不可"
}

比較演算子まとめ

演算子意味大文字小文字無視
-eq / -ne等しい / 等しくない-ieq / -ine
-lt / -leより小さい / 以下-ilt / -ile
-gt / -geより大きい / 以上-igt / -ige
-like / -notlikeワイルドカードマッチ-ilike
-match / -notmatch正規表現マッチ-imatch
-contains / -notcontainsコレクションに含まれるか-icontains
-in / -notin左辺が右辺コレクションに含まれるか

ファイル・サービスの存在チェック

# ファイルの存在チェック
if (Test-Path "C:\work\data.txt") {
    Write-Host "ファイルが存在します"
} else {
    Write-Host "ファイルが見つかりません"
}

# サービスの状態チェック
$svc = Get-Service -Name "wuauserv" -ErrorAction SilentlyContinue
if ($svc -and $svc.Status -eq "Running") {
    Write-Host "Windows Updateサービスは実行中"
} else {
    Write-Host "サービスが停止中または存在しない"
}

# nullチェック
$value = $null
if ($null -eq $value) {
    Write-Host "値が設定されていません"
}

switch文(複数条件の分岐)

複数の値で分岐する場合、if-elseifを並べるよりswitch文の方がすっきり書けます。

$day = (Get-Date).DayOfWeek

switch ($day) {
    "Monday"    { Write-Host "月曜日 - 週の始まり" }
    "Tuesday"   { Write-Host "火曜日" }
    "Wednesday" { Write-Host "水曜日" }
    "Thursday"  { Write-Host "木曜日" }
    "Friday"    { Write-Host "金曜日 - 週末まであと少し!" }
    "Saturday"  { Write-Host "土曜日 - お休み" }
    "Sunday"    { Write-Host "日曜日 - お休み" }
    default     { Write-Host "不明な曜日" }
}

# switchで複数条件・正規表現も使える
switch -Regex ($input) {
    "^\d+$"    { Write-Host "数字のみ" }
    "^[a-z]+$" { Write-Host "小文字アルファベットのみ" }
    default    { Write-Host "その他" }
}

三項演算子の代わり(インライン条件式)

# PowerShell 7以降では三項演算子が使える
$x = 10
$result = $x -gt 5 ? "5より大きい" : "5以下"
Write-Host $result

# PS 5.1でも動く書き方
$result = if ($x -gt 5) {"5より大きい"} else {"5以下"}

PowerShellで「$null -eq $value」と書く順番に最初は違和感がありますが、これは意図的な推奨スタイルです。「$value -eq $null」だと$valueが配列の場合に予期しない動作をすることがあるため、$nullを左辺に置くのがベストプラクティスです。

hobbyshift管理人

まとめ

  • if-elseif-elseで条件分岐を書く。比較演算子は-eq/-gt/-ltなど英語形式
  • 大文字小文字を無視するには-ieq/-ilike/-imatchなど先頭に「i」をつける
  • Test-Pathでファイル・フォルダの存在確認、$null -eq $valueでnullチェック
  • switch文は複数条件の分岐を簡潔に書けて、正規表現マッチにも対応している

コメント

タイトルとURLをコピーしました