跳轉至

建立 2026-09-19 更新 2026-09-19

條件與迴圈

腳本要能「看情況做事」與「重複做事」。條件判斷用 if,重複用 foreach 等迴圈。這兩個是腳本語法中最常用的部分,掌握 ifforeach 就能完成大多數工作。

if 條件判斷

$score = 85

if ($score -ge 90) {
    'A'
}
elseif ($score -ge 80) {
    'B'
}
else {
    'C'
}

括號裡放的是會得到真或假的運算式。PowerShell 的比較運算子用文字,不用符號:

運算子 意思 運算子 意思
-eq 等於 -ne 不等於
-gt 大於 -ge 大於等於
-lt 小於 -le 小於等於
-like 萬用字元比對 -match 正規表示式比對
-in 值在集合內 -contains 集合含有某值
-and -or
-not! 反向
if ($name -like 'web*' -and $port -eq 443) { '這是 HTTPS 網頁伺服器' }

字串比較預設不分大小寫

'ABC' -eq 'abc' 的結果是 True。需要區分大小寫時,使用 -ceq-clike 等前面加 c 的版本。

測試路徑是否存在

腳本中常用 Test-Path 先確認檔案或資料夾存在:

if (Test-Path 'C:\Logs') {
    Get-ChildItem 'C:\Logs'
}
else {
    New-Item -ItemType Directory -Path 'C:\Logs' | Out-Null
}

foreach 迴圈

foreach 對集合中的每一個元素執行一次區塊:

$servers = 'web01', 'web02', 'db01'

foreach ($server in $servers) {
    "檢查 $server ..."
}

foreach 語句與管線中的 ForEach-Object 不同:foreach 先把整個集合載入記憶體再逐一處理,速度快、寫法直覺;ForEach-Object 邊接收管線輸出邊處理,適合資料量大或需要串流的情況。

# 兩者結果相同,寫法不同
foreach ($f in Get-ChildItem *.log) { $f.Name }
Get-ChildItem *.log | ForEach-Object { $_.Name }

其他迴圈

# for:需要計數器時
for ($i = 1; $i -le 3; $i++) {
    "第 $i 次"
}

# while:條件成立就重複(先判斷再執行)
$n = 0
while ($n -lt 3) {
    $n++
}

# do...while:至少執行一次,再判斷
do {
    $answer = Read-Host '輸入 y 繼續'
} while ($answer -ne 'y')

在迴圈中,break 立即跳出整個迴圈,continue 跳過這一輪、直接進入下一輪。

switch:多選一

同一個值要與很多種情況比對時,switch 比一長串 elseif 清楚:

switch ($env:OS) {
    'Windows_NT' { 'Windows' }
    default      { '其他系統' }
}

switch -Wildcard ($fileName) {
    '*.log' { '記錄檔' }
    '*.csv' { '資料檔' }
    default { '未知類型' }
}

PowerShell 7 的新運算子

PowerShell 7 加入了幾個其他語言常見的簡寫,能讓條件式更短。這些在 Windows PowerShell 5.1 不能用。

# 三元運算子:條件 ? 為真時 : 為假時
$label = ($score -ge 60) ? '及格' : '不及格'

# 空值合併:左邊是 $null 就用右邊
$port = $env:APP_PORT ?? 8080

# 空值合併指派:變數是 $null 時才指派
$name ??= 'guest'

# 管線鏈:前一個成功才執行下一個(&&),失敗才執行(||)
Get-Item ./config.json && '設定檔存在'

平行處理

PowerShell 7 的 ForEach-Object -Parallel 可以同時處理多筆資料,適合每一筆都要等網路或磁碟的工作:

1..5 | ForEach-Object -Parallel {
    Start-Sleep -Seconds 1
    "完成 $_"
} -ThrottleLimit 5

五筆工作各等 1 秒,平行執行下總共約 1 秒完成,而不是 5 秒。-ThrottleLimit 限制同時執行的數量。

推薦影音

官方:PowerShell 7 新運算子

簡述:PowerShell 團隊說明 PowerShell 7 新增的運算子(約 12 分鐘),對應本頁最後的「新運算子」一節。這是 PowerShell 7.0 發布時的影片,示範的運算子至今仍是 PowerShell 7 的標準功能。

官方:ForEach-Object -Parallel

簡述:PowerShell 團隊示範 ForEach-Object -Parallel 平行處理(約 5 分鐘),對應本頁「平行處理」一節。

相關資料