🦆
WindowsPCのイベントログ調査の基礎データを準備する
なぜ作成したのか
- 古くなってきたPCに対する交換希望の線引きのためイベントログの情報を基準にすべく基礎情報をまとめる
やりたいこと
- 対象PCで発生しうるイベントログのリストを取得する
Powershellによるイベントプロバイダー情報の取得
$outputPath = "出力ファイルの絶対パス"
$results = @()
$providers = Get-WinEvent -ListProvider *
foreach ($provider in $providers) {
$providerName = $provider.Name
$logNames = ($provider.LogLinks | ForEach-Object { $_.LogName }) -join ";"
foreach ($event in $provider.Events) {
$results += [PSCustomObject]@{
ProviderName = $providerName
LogName = $logNames
EventID = $event.Id
Level = $event.Level.DisplayName
Opcode = $event.Opcode.DisplayName
Task = $event.Task.DisplayName
Description = ($event.Description -replace "`r?`n", " ") -replace ",", " "
}
}
}
# CSV出力
$results | Export-Csv -Path $outputPath -Encoding UTF8 -NoTypeInformation
Write-Host "定義済みイベント(Description付き)をCSVで出力しました:$outputPath"
結構エラーは検出されるのでエラーハンドルはちゃんとやったほうがよさげ
出力結果イメージ
ProviderName | LogName | EventID | Level | Opcode | Task | Description |
---|---|---|---|---|---|---|
Application Error | Application | 1000 | エラー | アプリケーション クラッシュ イベント 障害が発生しているアプリケーション名: %1、バージョン: %2、タイム スタンプ: 0x%3 障害が発生したモジュール名: %4、 バージョン: %5、タイム スタンプ: 0x%6 例外コード: 0x%7 フォールト オフセット: 0x%8 フォールト プロセス ID: %9 アプリケーションのフォールトの開始時刻: %10 Faulting アプリケーション パス: %11 Faulting モジュール パス: %12 Report Id: %13 Faulting パッケージの完全名: %14 Faulting パッケージ相対アプリケーション ID: %15 | ||
Application Error | Application | 1005 | エラー | アプリケーション クラッシュ イベント | "次のいずれかの理由によりファイル %1 にアクセスできません: ネットワーク接続、このファイルの保存先ディスク、またはこのコンピューターにインストールされている記憶域 ドライバーに問題があります。または、ディスクが見つかりません。 このエラーによりプログラム %2 は終了しました。 プログラム: %2 ファイル: %1 エラー値は [追加データ] セクションに一覧表示されます。 ユーザー操作 1. このファイルをもう一度開きます。 この状況は、プログラムを再実行するときに修復される一時的な問題である可能性があります。 2. このファイルにまだアクセスできず、 ファイルがネットワーク上にある場合は、 ネットワーク管理者がネットワークに問題がないこと、およびサーバーにアクセスできることを検証する必要があります。 - ファイルが、フロッピー ディスクや CD-ROM などのリムーバブル ディスクにある場合は、ディスクがコンピューターに完全に挿入されていることを確認します。 3. CHKDSK を実行してファイル システムをチェックおよび修復します。CHKDSK を実行するには、[スタート] ボタンをクリックし、[ファイル名を指定して実行] をクリックし、「CMD」と入力して、[OK] をクリックします。コマンド プロンプトで「CHKDSK /F」と入力してから、Enter キーを押します。 4. 問題が解決しない場合は、バックアップ コピーからファイルを復元します。 5. 同じディスク上の他のファイルが開くかどうかを確認します。開かない場合は、そのディスクが壊れている可能性があります。ハード ディスクの場合は、管理者またはコンピューター ハードウェア ベンダーに連絡して サポートを受けます。 追加データ エラー値: %3 ディスクの種類: %4" | |
Application Hang | Application | 1002 | エラー | ハング イベント | プログラム %1 バージョン %2 は Windows との対話を停止し、閉じられました。問題に関する詳細情報が利用可能かどうかを参照するには、セキュリティとメンテナンスのコントロール パネルで問題の履歴を確認してください。 | |
LsaSrv | System;Microsoft-Windows-LSA/Performance;Microsoft-Windows-LSA/Operational;Microsoft-Windows-LSA/Diagnostic | 100 | エラー | "サーバーの認証に必要な資格情報がセキュリティ パッケージでキャッシュされていません。 パッケージ名: %1 ユーザー名: %2 ドメイン名: %3 サーバー名: %4 保護されているユーザー: %5 エラー コード: %6 " | ||
LsaSrv | System;Microsoft-Windows-LSA/Performance;Microsoft-Windows-LSA/Operational;Microsoft-Windows-LSA/Diagnostic | 200 | 警告 | "セキュリティ パッケージが、ログオフの完了後にネットワーク ログオン要求を受信しました。 ユーザー名: %1 ドメイン名: %2 ログオン ID: %3 ログオフ時間: %4 PID: %5 プログラム: %6 プリンシパル名: %7 サーバー名: %8 パッケージ名: %9 呼び出しの種類: %10 エラー コード: %11 " |
所感
-
Get-WinEvent
は発生したイベントしか取得できないと思ってたので-ListProvider *
でイベントプロバイダー総ざらいできるのは盲点だった - まずは基礎データテーブルとして使用する
- これから警告以上のイベントを抽出、一般的な原因、対処方法の情報を仕入れておく
- 実際に問題の危機で検出されたイベントを照合、判断記録を残していく感じにしたい
Discussion