もくじ
📝 はじめに
PowerShellで一覧データを扱っていると、
「1件ずつ処理をしたい」
「行ごとに条件を判定して別の処理を行いたい」
と感じる場面はよくあります。
そんなときに使うのが
ForEach-Object です。
この記事では、パイプラインで流れてくるデータを1行ずつ処理する基本から、
実務でよく使われる応用例までを分かりやすく解説します。
- 一覧の各行に対して同じ処理を行いたい
- 条件に応じて処理内容を変えたい
- ログ出力や一括操作を行いたい
✅ このコマンドでできること(要点)
- パイプラインのデータを1件ずつ処理できる
- 各行に対して自由な処理を書ける
- 条件分岐や計算処理を組み込める
- 他のコマンドと柔軟に組み合わせられる
✅ ForEach-Object でできること
ForEach-Object は、
パイプラインで流れてくるオブジェクトを
1件ずつ順番に処理するためのコマンドです。
考え方としては、
「一覧を1行ずつ取り出して処理するループ」
をパイプライン上で書けるイメージです。
🧩 基本構文
ForEach-Object {
# 1件ごとに実行される処理
}
中括弧 { } の中が、
各行ごとに実行されます。
▶ 基本的な使い方(まずこれだけ)
🔹 ファイル一覧を1件ずつ表示する
Get-ChildItem | ForEach-Object {
$_.Name
}
各ファイル名が1つずつ処理されて表示されます。
名前が順番に表示されていれば問題ありません。
🔹 メッセージを付けて出力する
Get-Process | ForEach-Object {
"Process: $($_.Name)"
}
各行の情報を加工して出力できます。
🛠 よく使われる指定例
🔹 条件に応じて処理を分ける
Get-Process | ForEach-Object {
if ($_.CPU -gt 10) {
"$($_.Name) : High CPU"
}
}
条件に一致した行だけ処理されます。
エラーが出なければ正常です。
🔹 ファイル操作を行う
Get-ChildItem *.log | ForEach-Object {
Copy-Item $_.FullName C:\backup
}
対象ファイルが1件ずつコピーされます。
💼 実務でよく使う使用例(応用)
🔹 ログを加工して別ファイルに出力
Get-Content log.txt | ForEach-Object {
"[LOG] $_"
} | Out-File newlog.txt
1行ずつ加工された内容が出力されていればOKです。
🔹 複数のコマンドを組み合わせる
Get-Process |
Where-Object CPU -gt 5 |
ForEach-Object {
"$($_.Name) : $($_.CPU)"
}
- Where-Object で条件抽出してから処理
- Select-Object で必要な列だけ使う
- Out-File で結果を保存
🧩 よくある勘違い・つまずきポイント
- $_ は現在処理中の1件を指す
- ForEach-Object はパイプライン専用である
- 大量データでは処理に時間がかかる
- 表示専用に見えても処理は実行される
- Format系コマンドと混同しやすい
🔄 cmdとの違いについて
cmdでは同様の処理を行うには
for などを使って
バッチ処理を書く必要があります。
PowerShellの ForEach-Object は、
パイプラインの流れの中で直感的に書ける点が特徴です。
⚠ エラー・うまく動かないときの確認ポイント
- パイプラインでデータが渡ってきているか
- $_ を正しく使っているか
- 処理内容が重すぎないか
- Format系コマンドを前に置いていないか
🧠 注意点
ForEach-Object は非常に柔軟ですが、
複雑な処理を詰め込みすぎると読みにくくなります。
必要に応じてスクリプトブロックを分けるのがおすすめです。
📌 まとめ
- ForEach-Object は1行ずつ処理する基本コマンド
- 条件分岐や加工処理を自由に書ける
- パイプラインと組み合わせることで真価を発揮する
- 次は ForEach 文(構文)との違いを理解すると便利
🔎 PowerShellコマンドを探す
やりたいことからコマンドを探せます。
- ファイルを削除したい
- 一覧を表示したい
- 文字列を検索したい
- 条件で絞り込みたい
- エラーや実行できない原因を調べたい
- 1行ずつ処理したい
- 一括処理を行いたい
