「複数のファイルに同じ処理をしたい」
「たくさんのデータを一つずつ確認したい」
そんなときに使うのが、PowerShellのforeachです。
foreachを使うと、リストの中身を一つずつ処理できます。
これにより、面倒な作業を自動化できるようになります。
この記事では、PowerShellのforeachについて、基本的な使い方から実際の例、気をつけるポイントまで詳しく説明します。
基本構文:PowerShellのforeachの書き方

PowerShellでは、foreachを2つの方法で書けます。
書き方その1:キーワード形式
説明
foreach ($変数名 in $リスト名) {
# ここに処理を書く
}
例
$fruits = @("りんご", "バナナ", "オレンジ")
foreach ($fruit in $fruits) {
Write-Output "果物: $fruit"
}
実行結果
果物: りんご
果物: バナナ
果物: オレンジ
書き方その2:パイプライン形式
説明
$リスト名 | ForEach-Object {
# $_ は今処理している要素
}
例
"りんご", "バナナ", "オレンジ" | ForEach-Object {
Write-Output "果物: $_"
}
実行結果
果物: りんご
果物: バナナ
果物: オレンジ
どちらを使えばいい?
- 書き方その1:スクリプトファイルを作るときにおすすめ
- 書き方その2:コマンドラインで一行で書きたいときにおすすめ
実際に使える例

ファイル一覧を処理する
説明 フォルダの中にあるファイルを一つずつ確認したいとき
例
$files = Get-ChildItem "C:\Logs"
foreach ($file in $files) {
Write-Output "処理中: $($file.Name)"
}
フォルダを一括で作る
説明 複数のユーザー用フォルダを一度に作りたいとき
例
$users = "田中", "佐藤", "鈴木"
foreach ($user in $users) {
New-Item -Path "C:\Users\$user" -ItemType Directory
}
プロセス情報を取得する
説明
動いているプロセスの情報を見やすく表示したいときは、ForEach-Objectを使います。
例
Get-Process | ForEach-Object {
"$($_.Name): $($_.Id)"
}
気をつけるポイント
変数名が重複する問題
問題のある例
$file = "重要なファイル"
foreach ($file in $files) {
# $fileが上書きされてしまう!
}
解決方法 変数名を分かりやすく、重複しないようにつける
$importantFile = "重要なファイル"
foreach ($currentFile in $files) {
# これなら安全
}
空のリストを処理する問題
問題のある例
$items = @() # 空のリスト
foreach ($item in $items) {
# 何も起きない(エラーにはならない)
}
解決方法 事前にリストが空でないか確認する
if ($items.Count -gt 0) {
foreach ($item in $items) {
# 処理
}
} else {
Write-Output "処理するデータがありません"
}
メソッド呼び出しの間違い
間違った例
"hello", "world" | ForEach-Object {
Write-Output $_.ToUpper() # エラーになる
}
正しい例
"hello", "world" | ForEach-Object {
Write-Output ($_.ToUpper()) # 括弧をつける
}
まとめ
書き方 | 特徴 | いつ使う? |
---|---|---|
foreach ($x in $y) | 読みやすい | スクリプトファイル |
ForEach-Object {} | パイプラインと組み合わせ | コマンドライン |
よく使う場面
- ファイルやフォルダの一括処理
- 複数のユーザー操作
- プロセスやサービスの一括確認
コメント