
最短・最小構成でIISログ(.log
/ .txt
)をサクッと全文検索できるPowerShell関数を紹介します。正規表現なし、単純一致のみに割り切ることで、現場での“とりあえず今すぐ探したい”に最速で応えます。
この記事で得られること
- フォルダ配下のIISログを単純一致で一気に検索
- ファイル名 / 行番号 / 該当行を一覧化
- 再帰検索・拡張子指定の最低限オプションのみ
動作環境
- Windows PowerShell 5.1 以上(PowerShell 7 でも可)
- 権限:通常ユーザーでOK(ログフォルダが読めればOK)
使うコード(コピペOK)
Find-IISLog.ps1
などの名前で保存してください。
function Find-IISLog {
[CmdletBinding()]
param(
[Parameter(Mandatory)]
[string]$Path, # さがすフォルダ or ファイル
[Parameter(Mandatory)]
[string]$Keyword, # 単純一致のキーワード
[switch]$Recurse, # 再帰(サブフォルダも)
[string[]]$Include = @('*.log','*.txt') # 対象拡張子
)
# フォルダ or ファイルを解決
$targets =
if (Test-Path $Path -PathType Leaf) {
Get-Item $Path
} else {
Get-ChildItem -Path $Path -File -Include $Include -Recurse:$Recurse -ErrorAction SilentlyContinue
}
# 単純一致で検索(出力はファイル名, 行番号, 行テキスト)
$targets | Select-String -SimpleMatch -Pattern $Keyword |
Select-Object Path, LineNumber, Line
}
使い方
1) フォルダ配下をまとめて検索(再帰)
Find-IISLog -Path 'D:\IISLogs' -Keyword 'wp-login.php' -Recurse
2) 単一ファイルを検索
Find-IISLog -Path 'D:\IISLogs\u_ex240925.log' -Keyword ' 500 '
3) 拡張子を追加(例:.csvも対象に)
Find-IISLog -Path 'D:\IISLogs' -Keyword '404' -Recurse -Include *.log,*.txt,*.csv
4) CSVに保存して共有
Find-IISLog -Path 'D:\IISLogs' -Keyword 'login' -Recurse |
Export-Csv -NoTypeInformation -Encoding UTF8 'hits.csv'
即席ワンライナー(関数登録が面倒なとき)
Get-ChildItem 'D:\IISLogs' -Recurse -Include *.log,*.txt -File |
Select-String -SimpleMatch '404' |
Select-Object Path, LineNumber, Line
よくあるハマりどころ
- 検索にヒットしない
→-SimpleMatch
はそのまま文字列一致です。スペースや大文字小文字の差に注意(大文字小文字は既定で無視)。IPやURL断片は前後の空白も含めると意図せぬヒットが減ります。 - ログが見つからない
→-Recurse
を付け忘れていないか確認。拡張子が.log
/.txt
以外なら-Include
に追加。 - 文字化け
→ IISログは基本UTF-8。古い資産でSJISが混在する場合は、先にGet-Content -Encoding ...
で変換してから検索を。
運用の小ネタ
- PowerShellプロファイルに関数を入れて常時使えるように
notepad $PROFILE # 開いて関数を追記、保存
- 頻出キーワード用に関数ラッパー
function Find-500 { param($p='D:\IISLogs') Find-IISLog -Path $p -Keyword ' 500 ' -Recurse }
まとめ
- 単純一致だけに絞ったミニマル関数で、現場の一次調査が爆速に。
- 「まず傾向を掴む」「URLやIPの当たりを付ける」という初動に最適。
- 詳細な抽出や集計が必要になったら、CSV化→Excel/Power BIや、追加スクリプトで段階的に深掘りしましょう。
コメント