もくじ
📝 はじめに
PowerShellでログ調査や設定ファイルの確認をしていると、
「特定の文字列がどこに書かれているか探したい」
「大量のログからエラー行だけを抜き出したい」
「複数ファイルをまとめて検索したい」
という場面によく出会います。
そんなときに活躍するのが
Select-String です。
PowerShellにおける文字列検索(grep相当)の中核となるコマンドです。
- ログファイルからエラー行を探したい
- 設定ファイル内のキーワードを確認したい
- 複数ファイルをまとめて検索したい
✅ このコマンドでできること(要点)
- ファイル内の文字列を検索できる
- 複数ファイル・再帰検索に対応
- 正規表現による検索ができる
- 検索結果をオブジェクトとして扱える
✅ Select-String でできること
Select-String は、
テキストデータの中から
指定した文字列やパターンを含む行を抽出するコマンドです。
単なる表示用コマンドではなく、
検索結果はオブジェクトとして返されるため、
その後の加工・保存・集計が簡単に行えます。
cmd の findstr や
Linux の grep に近い役割ですが、
PowerShellではより柔軟に扱えるのが特徴です。
🧩 基本構文
Select-String -Path 検索対象 -Pattern 検索文字列
-Pattern には検索したい文字列や正規表現を指定します。
▶ 基本的な使い方(まずこれだけ)
🔹 ファイル内から文字列を検索する
Select-String -Path C:\Logs\app.log -Pattern "ERROR"
ERROR を含む行が表示されます。
この結果が表示されていれば、検索は正常に行えています。
🔹 複数ファイルをまとめて検索する
Select-String -Path C:\Logs\*.log -Pattern "failed"
指定したフォルダ内の複数ファイルが対象になります。
🛠 よく使われる指定例
🔹 再帰的にファイルを検索する
Select-String -Path C:\Logs\* -Pattern "Exception" -Recurse
サブフォルダも含めて検索できます。
🔹 大文字・小文字を区別せず検索する
Select-String -Path C:\Logs\app.log -Pattern "error" -CaseSensitive:$false
ログの表記揺れ対策としてよく使われます。
💼 実務でよく使う使用例(応用)
🔹 エラー行だけをファイルに保存する
Select-String C:\Logs\app.log "ERROR" |
Out-File C:\Logs\error_only.txt
🔹 行番号付きで検索結果を確認する
Select-String C:\Logs\app.log "WARN" |
Select-Object Filename, LineNumber, Line
- Get-ChildItem で対象ファイルを列挙
- Out-File で検索結果を保存
- ログ調査・障害対応の効率化
🧩 よくある勘違い・つまずきポイント
- 正規表現が使われていることを知らずに戸惑う
- バイナリファイルを検索してしまう
- 検索対象のパス指定ミス
- 文字コードの違いでヒットしない場合がある
- find や findstr と同じ感覚で使おうとする
🔄 cmdとの違いについて
cmd の findstr は文字列検索のみですが、
PowerShell の Select-String は
検索結果をオブジェクトとして扱える点が大きな違いです。
そのため、行番号・ファイル名・内容を
後続処理で自由に加工できます。
⚠ エラー・うまく動かないときの確認ポイント
- 検索対象のファイル・フォルダが存在しているか
- 正規表現の書き方が間違っていないか
- 文字コードの影響を受けていないか
- -Recurse の指定が必要ではないか
🧠 注意点
Select-String は強力ですが、
大量ファイルを再帰検索すると
処理に時間がかかる場合があります。
必要な範囲に検索対象を絞るのがコツです。
📌 まとめ
- Select-String はPowerShellの文字列検索コマンド
- grep / findstr 相当だが、より高機能
- ログ調査・設定確認で大活躍
- 検索結果を後続処理に活かせる
🔎 PowerShellコマンドを探す
やりたいことからコマンドを探すこともできます。
- ファイル内を検索したい
- ログからエラーを探したい
- 特定の文字列を抽出したい
- 複数ファイルをまとめて検索したい
- エラーや実行できない原因を調べたい
- PowerShellでログ調査したい
- grepの代わりを探している
