システム運用やトラブルシューティングにおいて、ログ解析は欠かせない作業です。Windows環境では、イベントログ、テキストログ、カスタムログなど、さまざまなログが存在しますが、それらを効率的に解析するにはPowerShellのスキルが非常に役立ちます。この記事では、PowerShellを使ってログを解析する基本から応用までをわかりやすく解説します。初学者でも実践できるように、具体的なコマンドやサンプル付きで紹介します。
PowerShellでは、以下のようなログを扱うことができます。
これらはGet-EventLog
やGet-WinEvent
コマンドレットを使ってアクセスできるほか、Get-Content
とパイプ処理を使ってカスタムログを柔軟に解析することも可能です。
まずは基本的なコマンドから紹介します。以下のように使えば、特定のログを取得できます。
Get-EventLog -LogName System -Newest 10
このコマンドは「System」ログの最新10件を取得します。
より詳細な情報を抽出するには、次のようにフィルタを追加します。
Get-EventLog -LogName Application -EntryType Error -After (Get-Date).AddDays(-1)
このコマンドは、過去24時間以内に記録された「アプリケーションログ」の「エラー」だけを抽出します。
Get-WinEvent
は、XML形式のフィルタが使えるため、より高度な検索が可能です。
Get-WinEvent -LogName Security | Where-Object { $_.Id -eq 4625 }
このコマンドは、ログオン失敗イベント(ID:4625)だけを抽出します。
XMLクエリを使って絞り込む例:
$filter = @"
<QueryList>
<Query Id="0" Path="Security">
<Select Path="Security">*[System[(EventID=4624)]]</Select>
</Query>
</QueryList>
"@
Get-WinEvent -FilterXml $filter
独自のアプリケーションログ(例:Apache、IISなどのログファイル)はGet-Content
で読み込みます。
Get-Content "C:\Logs\app.log" | Select-String "ERROR"
このようにすると、ログの中から”ERROR”を含む行だけを抽出できます。
日付でフィルタしたい場合:
Get-Content "C:\Logs\app.log" | Where-Object { $_ -match "2025-04-10" }
Select-String
はログ解析において非常に強力です。正規表現もサポートしています。
Get-Content "C:\Logs\app.log" | Select-String -Pattern "Exception|Error|Fail"
複数のエラーキーワードを一気に検出できます。
特定のパターンに一致する行番号を取得:
Get-Content "C:\Logs\app.log" | Select-String -Pattern "Timeout" | Select LineNumber, Line
PowerShellで解析したログをCSVに保存して、Excelなどで可視化することも簡単です。
Get-EventLog -LogName System -Newest 100 |
Select TimeGenerated, EntryType, Source, Message |
Export-Csv -Path "C:\Logs\SystemLog.csv" -NoTypeInformation
これは「システムログ」の最新100件を抽出し、必要な情報のみCSVファイルに保存する例です。
$logs = Get-EventLog -LogName Application -EntryType Error -After (Get-Date).AddDays(-7)
$logs | Select TimeGenerated, Source, EventID, Message | Format-Table -AutoSize
$today = (Get-Date).ToString("yyyy-MM-dd")
Get-Content "C:\Logs\custom.log" | Where-Object { $_ -match $today }
ログの種類や頻度を集計するには、Group-Object
が便利です。
Get-EventLog -LogName Application -Newest 1000 |
Group-Object -Property Source |
Sort-Object -Property Count -Descending |
Select-Object -First 10
これにより、発生頻度の多いアプリケーション名を上位10件表示できます。
PowerShellはログ解析において非常に強力なツールです。GUIでは困難なフィルタリングやデータ集計も、スクリプトを使えば簡単に自動化できます。
本記事で紹介した基本的なコマンドとテクニックを活用すれば、日々の運用業務や障害対応の効率化に大いに役立つはずです。
まずは、自分の環境で使われているログを確認し、少しずつPowerShellのコマンドを試してみてください。