【保存版】IISログを“単純一致”で高速全文検索するPowerShellワンファイル

雑記

最短・最小構成で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や、追加スクリプトで段階的に深掘りしましょう。

コメント

タイトルとURLをコピーしました