Filter 篩選器名稱 (參數) { 程式碼區塊 }
與 Function 關鍵字不同,篩選器專為管線處理設計。
| 特性 | Function 函數 | Filter 篩選器 |
|---|---|---|
| 管線輸入變數 | $input(一次接收所有物件集合) | $_(逐個接收管線物件) |
| 處理方式 | 需自行迴圈/遞迴處理集合 | 自動對每個輸入物件執行一次程式碼區塊 |
| 適用場景 | 邏輯封裝、複雜流程控制 | 資料流轉換、逐項過濾/投影 |
function fun { "run"; $_.name }
ls | fun

結果:無任何輸出,因為 $input 未被處理,$_ 在函數外層無定義。
filter fun { "run"; $_.name }
ls | fun

結果:正確輸出每個檔案名稱,篩選器自動對管線每個物件執行區塊。
function fun {
begin { "Start"; $i=1 }
process { "run $i"; $_.name; $i++ }
end { "End" }
}
ls | fun
此時 Function 行為與 Filter 相同,因為 process 區塊會對每個管線物件執行一次。
# 篩選器範例:只輸出大於 1MB 的檔案
filter Get-LargeFile {
if ($_.Length -gt 1MB) { $_ }
}
# 使用
Get-ChildItem -Recurse | Get-LargeFile
善用 Filter 簡化管線腳本,讓程式碼更具宣告式風格與可讀性。