0

状況:サーバー (約 18 GB) に古いセキュリティ イベント ログが多数あります。ログは、evt ファイルとして専用の HDD パーティションに保存されます (-> ログは eventviewer には含まれません)。

欲しい:すべてのログで特定のイベント ID を検索したい。

問題: EventLog-Class を使用してイベント ビューアーに「含まれていない」イベント ログ ファイルを開くことができません。

アイデア: .NET のEventLogClassを使用します。EventLog log = new EventLog();
しかし、別の HDD パーティションにある特定のイベント ログ ファイルを参照できません。

私の意見では、次のような可能な方法をすべて試しました。

EventLog log = new EventLog(filepath, Computername)
EventLog log = new EventLog(filepath, ".")
EventLog log = new EventLog(filename, Computername, filepath)
EventLog log = new EventLog(filename, ".", filepath)

最初の 2 つは、"\" のような特殊文字は使用できないというエラー メッセージです。最後の 2 つで、コンピュータ上にそのようなファイル「ファイル名」が見つからないというエラー メッセージが表示されます (彼は、イベント ビューアに「含まれている」イベント ログを検索していると思います)。

質問:私はそのようなファイルを開きたいのですが、それが私のアイデアのクラスで動作するかどうかは問題ではありません。イベント ID のみを検索し、特定の ID が見つかった場合は、イベント全体を txt、csv などにエクスポートします。

前もって感謝します!

4

1 に答える 1

0

これは、イベント ファイルと ID をパラメーターとして受け取るメソッドで、 EventRecordを返します。

public static EventRecord GetEventRecord(string eventFile, int eventID)
{
  var xpathQuery = string.Format("*[System/EventID={0}]", eventID);
  var query = new EventLogQuery(eventFile, PathType.FilePath, xpathQuery);
  var reader = new EventLogReader(query);
  return reader.ReadEvent();
}

使用例:

static void Main(string[] args)
{
  var rec = GetEventRecord(@"w:\kanta\eventi.evtx", 903);
  /// due to a bug you have to set current culture to en-US or FormatDescription won't work
  /// https://connect.microsoft.com/VisualStudio/feedback/details/498054/net-3-5-sp1-eventrecord-formatdescription#
  Thread.CurrentThread.CurrentCulture = new CultureInfo("en-US");
  Console.Write(rec.FormatDescription());
  Console.ReadKey();
}
于 2013-08-08T15:02:35.803 に答える