What(概要)
本記事では、PowerShellを使用してログファイルから特定の情報を抽出する方法を解説します。これにより、効率的なログ分析やシステム監視が可能になります。
Why(なぜ)
大規模な環境では、ログファイルは急速に肥大化し、大量の情報が蓄積されます。PowerShellのテキスト処理機能を使えば、必要なデータだけを抽出し、トラブルの兆候を素早く察知・報告することが可能です。管理者にとって必須のスキルです。
How(方法)
ステップ1:ログファイルの読み込み
Get-Content
コマンドでログファイルを1行ずつ読み込みます。
Get-Content -Path "C:\Logs\system.log"
ステップ2:キーワードによる抽出
Select-String
を使って「ERROR」など特定のキーワードを含む行だけを抽出します。
Get-Content -Path "C:\Logs\system.log" | Select-String -Pattern "ERROR"
ステップ3:複数のキーワードを検索
キーワードを配列として指定することで、複数の語句を同時に検索できます。
$patterns = "ERROR", "WARNING"
Get-Content -Path "C:\Logs\system.log" | Select-String -Pattern $patterns
ステップ4:日付範囲での抽出
正規表現を使って、特定の日付範囲のログを抽出します。
Get-Content -Path "C:\Logs\system.log" | Where-Object { $_ -match "2025-04-(1[5-9]|2[0-5])" }
ステップ5:CSV形式で出力
抽出したログをCSVファイルとして保存できます。
Get-Content -Path "C:\Logs\system.log" | Select-String "ERROR" | ForEach-Object {
[PSCustomObject]@{
LineNumber = $_.LineNumber
Text = $_.Line
Path = $_.Path
}
} | Export-Csv -Path "C:\Logs\error_report.csv" -NoTypeInformation
ステップ6:スクリプト化による自動化
上記処理をスクリプトファイル(.ps1)にまとめて、日次実行などに対応可能です。
$logPath = "C:\Logs\system.log"
$outputPath = "C:\Logs\filtered_log.csv"
$filterPattern = "ERROR"
Get-Content -Path $logPath | Select-String -Pattern $filterPattern | ForEach-Object {
[PSCustomObject]@{
LineNumber = $_.LineNumber
Text = $_.Line
Path = $_.Path
}
} | Export-Csv -Path $outputPath -NoTypeInformation
Conclusion(まとめ)
数行のPowerShellコマンドを活用することで、必要なログ情報を効率的に抽出・管理できます。エラー監視や日次レポートの自動化など、日々の運用に役立つスクリプトとして活用していきましょう。