Select-String コマンドを利用することで、あるコマンドの後に | (パイプ) で値を渡し、特定の文字を含む結果を取得することができます。
その他にも Select-String コマンドを利用することで、テキスト内の文字列を検索することも可能です。
ログファイルからエラーを探したり、複数のファイルから特定の文字列を検索したりするときに便利です。
今回は、Select-String を使ってテキストファイル内の文字列を検索する方法を試してみました。
1.Select-Stringの基本的な使い方
Select-String を使ってファイル内を検索する場合、基本的には以下のように記載します。
Select-String -Pattern "検索文字列" -Path "ファイルパス"-Pattern に検索したい文字列を指定し、-Path に検索対象のファイルを指定します。
例えば、以下のような test.txt を用意します。
aaa
bbb
error: Connection failed
PowerShell
ddd
PowerShell
eeeこのファイルから PowerShell という文字列を検索します。
Select-String -Pattern "PowerShell" -Path "C:\hogehoge\test.txt"実行すると、以下のように検索に一致した行が表示されます。
PS C:\> Select-String -Pattern "PowerShell" -Path "C:\hogehoge\test.txt"
hogehoge\test.txt:4:PowerShell
hogehoge\test.txt:6:PowerShell
ファイルパスの後ろに表示されている 4 や 6 は、文字列が見つかった行番号です。
このように、Select-String を使うと、どのファイルの何行目に検索文字列が存在するのかを確認できます。
2.文字列を指定して検索する
上記とやり方はほとんど同じですが、error という文字列を検索する場合は以下のようにします。
Select-String -Pattern "error" -Path "C:\hogehoge\test.txt"error を含む行が検索結果として表示されます。
PS C:\> Select-String -Pattern "error" -Path "C:\hogehoge\test.txt"
hogehoge\test.txt:3:error: Connection failedログファイルから ERROR や Warning などの文字列を探す場合にも活用できます。
3.正規表現を使って検索する
Select-String の検索パターンには、正規表現を使用できます。
例えば、1行が a だけで構成されている行を検索する場合は、以下のようにします。
Select-String -Pattern "^a$" -Path "C:\hogehoge\test2.txt"^ は行の先頭、$ は行の末尾を表します。
そのため、以下のようなテキストファイルの場合、
a
aaa
abc検索結果には a の行だけが一致します。
PS C:\> Select-String -Pattern "^a$" -Path "C:\hogehoge\test2.txt"
hogehoge\test2.txt:1:a一方、単純に a を検索した場合は、以下のように a を含む aaa や abc も検索結果に含まれます。
PS C:\> Select-String -Pattern "a" -Path "C:\hogehoge\test2.txt"
hogehoge\test2.txt:1:a
hogehoge\test2.txt:2:aaa
hogehoge\test2.txt:3:abcこのように、単純な文字列検索だけでなく、正規表現を使って検索条件を細かく指定もできます。
4.複数のファイルを検索する
-Path にはワイルドカードを指定できます。
例えば、上記で試していた .txt ファイルから “a” の文字列を検索する場合は、以下のようにします。
Select-String -Pattern "a" -Path "C:\hogehoge\*.txt"実行結果は以下の通りです。
PS C:\> Select-String -Pattern "a" -Path "C:\hogehoge\*.txt"
hogehoge\test.txt:1:aaa
hogehoge\test.txt:3:error: Connection failed
hogehoge\test2.txt:1:a
hogehoge\test2.txt:2:aaa
hogehoge\test2.txt:3:abc複数のログファイルをまとめて検索できるため、ログ調査などで便利です。
5.拡張子を指定して検索する
-Path とワイルドカードを組み合わせることで、特定の拡張子だけを検索できます。
例えば、CSVファイルを検索する場合は以下のようにします。
Select-String -Pattern "aaa" -Path "C:\hogehoge\*.csv"CSVファイルもテキストとして検索できるため、特定の文字列が含まれている行を探すことができます。
以下のCSVファイルを用意して、上記のコマンドを実行すると
a,a,a
aaa,aaa,aaa
b,b,bbbbbbbbb以下のような結果となります。
PS C:\> Select-String -Pattern "aaa" -Path "C:\hogehoge\*.csv"
hogehoge\test.csv:2:aaa,aaa,aaaSelect-String は .txt ファイルだけを対象にしたコマンドレットではないので、.log、.csv、.json などの検索にも利用できます。
6.単純な文字列として検索する
Select-String はデフォルトでは検索パターンを正規表現として扱います。
正規表現を使わず、指定した文字列そのものを検索したい場合は -SimpleMatch を使用します。
Select-String -Pattern "PowerShell*" -Path "C:\hogehoge\test.txt" -SimpleMatchこの場合、PowerShell* を正規表現として解釈せず、そのままの文字列として検索します。
PS C:\> Select-String -Pattern "PowerShell*" -Path "C:\hogehoge\test.txt" -SimpleMatch
PS C:\>
PS C:\> Select-String -Pattern "PowerShell*" -Path "C:\hogehoge\test.txt"
hogehoge\test.txt:4:PowerShell
hogehoge\test.txt:6:PowerShell正規表現の特殊文字を含む文字列をそのまま検索したい場合にも便利です。
7.検索結果の有無だけを確認する
「文字列が存在するかどうかだけ確認したい」という場合は、-Quiet を利用できます。
Select-String -Pattern "PowerShell" -Path "C:\hogehoge\test.txt" -Quiet文字列が存在する場合は、True 存在しない場合は False が返ります。
if 文と組み合わせることで、特定の文字列がログに出力された場合だけ処理を実行できます。
if (Select-String -Pattern "PowerShell" -Path "C:\hogehoge\test.txt" -Quiet) {
Write-Host "文字列PowerShellが見つかりました。"
}ログ監視などで利用すると便利です。
8.検索した行の前後も表示する
エラーが発生した行だけでなく、その前後のログも確認したい場合は -Context を使用できます。
例えば、以下のログファイルがあった場合、
2026-09-24 10:00:01 INFO Server started successfully.
2026-09-24 10:01:15 INFO User login succeeded: user01
2026-09-24 10:02:03 WARNING Disk usage is above 80%.
2026-09-24 10:03:21 INFO Backup started.
2026-09-24 10:04:10 ERROR Connection to database failed.
2026-09-24 10:04:11 INFO Retrying database connection.
2026-09-24 10:05:00 INFO Backup completed.
2026-09-24 10:06:32 INFO User login succeeded: user02
2026-09-24 10:07:45 WARNING Disk usage is above 85%.検索した行の前後2行を表示する場合は以下のように記載します。
PS C:\> Select-String -Pattern "ERROR" -Path "C:\hogehoge\test.log" -Context 2,2
hogehoge\test.log:3:2026-09-24 10:02:03 WARNING Disk usage is above 80%.
hogehoge\test.log:4:2026-09-24 10:03:21 INFO Backup started.
> hogehoge\test.log:5:2026-09-24 10:04:10 ERROR Connection to database failed.
hogehoge\test.log:6:2026-09-24 10:04:11 INFO Retrying database connection.
hogehoge\test.log:7:2026-09-24 10:05:00 INFO Backup completed.ログ調査などで、周辺のログも一緒に確認する際に利用できます。
9.Select-Stringのエイリアスを使う
Select-String には sls というエイリアスがあります。
そのため、以下のように短く記述できます。
sls "ERROR" C:\hogehoge\test.log実行してみると、以下のように Select-String と同じ結果となります。
PS C:\> sls "ERROR" C:\hogehoge\test.log
hogehoge\test.log:5:2026-09-24 10:04:10 ERROR Connection to database failed.
PS C:\>
PS C:\> Select-String "ERROR" C:\hogehoge\test.log
hogehoge\test.log:5:2026-09-24 10:04:10 ERROR Connection to database failed.コマンドを短く入力したい場合にとても便利です。
10.パイプラインと組み合わせて検索する
Select-String はファイル検索だけでなく、パイプラインから渡された文字列の検索にも使用できます。
例えば、Get-Command の結果から set-win を含むコマンドを検索する場合は以下のようにします。
Get-Command | Select-String "set-win"Get-Command の実行結果を Select-String に渡すことで、set-win を含む結果だけを取得できます。
PS C:\> Get-Command | Select-String "set-win"
Reset-WinhttpProxy
Set-WinhttpProxy
Set-WinAcceptLanguageFromLanguageListOptOut
Set-WinCultureFromLanguageListOptOut
Set-WinDefaultInputMethodOverride
Set-WindowsEdition
Set-WindowsProductKey
Set-WindowsReservedStorageState
Set-WindowsSearchSetting
Set-WinHomeLocation
Set-WinLanguageBarOption
Set-WinSystemLocale
Set-WinUILanguageOverride
Set-WinUserLanguageList11.まとめ
今回は、PowerShellの Select-String を使ってテキストファイル内の文字列を検索する方法をまとめました。
基本的な使い方は以下のとおりです。
Select-String -Pattern "検索文字列" -Path "ファイルパス"Select-String を利用すると、以下のような検索ができます。
- テキストファイル内の文字列を検索する
- 複数のファイルをまとめて検索する
- 正規表現を使って検索する
-SimpleMatchで単純な文字列として検索する-Quietで検索結果の有無だけを確認する-Contextで前後の行を確認する- パイプラインから渡された結果を検索する
特にログファイルなどの調査では、特定のエラーやメッセージを探す機会が多いため、Select-String を覚えておくと便利です。
Microsoft公式ドキュメントでも、Select-String はファイル内のテキスト検索に加えて、正規表現、複数ファイル、エンコード指定などに対応しています。



