- PR -

VBからイベントログの取得

1
投稿者投稿内容
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2005-09-16 14:11
VB.NET2003にてイベントログを取得しているのですが質問があります
他のマシンのイベントログを以下のように取得しているのですが
当日のログしか取得ができません、日付けの範囲を指定して取得する方法があれば
教えていただけますでしょうか

Dim logs() As System.Diagnostics.EventLog
Dim log As System.Diagnostics.EventLog

logs = System.Diagnostics.EventLog.GetEventLogs("SERVER_NAME")
For Each log In logs
If log.LogDisplayName = "システム" Then
Dim entry As System.Diagnostics.EventLogEntry
For Each entry In log.Entries

Next
End If
Next
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2005-09-16 14:34
自己レスです
おもいっきり勘違いしてました、当日のログしか取れないのは
イベントログには当日分しか入っていないためでした...大変失礼いたしました。
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2005-09-20 10:20
イベントログに関して再度質問があります
一旦ファイルに保存されたイベントログの読み込みに関してです
イベントログは(.evt)形式でバイナリ保存されています
このイベントログを読み込んで条件処理(このイベントIDなら何々する)を行いたいのですが
バイナリーファイルの読み込みに関して知識が無いのでご存知の方ご教授願います
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2005-09-20 11:48
バイナリーファイルを直接読み込むには、データフォーマットが分からなければ、どうしようもないです。
間接的に読み込む方法を探してみると、Win32APIのOpenBackupEventLog関数があります。
.NET Frameworkライブラリに同じものがあればいいのだが...
いまのところ見つからないです。
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2005-09-20 12:00
イベントログ(今はシステムログですが)のフォーマットですが
管理ツール→イベントビューアからテキストファイルに出力したものがフォーマットと考えているのですが違ってますでしょうか?
だとすると
・日付
・時間
・ソース
・種類
・分類
・イベントID
・ユーザー
・コンピュータ
・説明
これらだと思っています

これで合っているとした場合バイナリーでの読み込み方法がわかればご教授願います
gtk2k
会議室デビュー日: 2004/03/14
投稿数: 3
投稿日時: 2005-09-20 12:58
IIS用のリソースキットにイベントファイルにSQLでアクセスするためのインターフェイスがはいっているそうで、入っているコンポーネントとして、以下の3つが該当するようです。

IIS 6.0 Resource Kit Tools
http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-ade629c89499&DisplayLang=en

IIS 6.0 Resource Kit
http://www.microsoft.com/downloads/details.aspx?FamilyID=80a1b6e6-829e-49b7-8c02-333d9c148e69&DisplayLang=en

IIS 6.0 Command Line Tools
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/iissdk/iis/command__line_tools_included_in_iis.asp

これらの3つのコンポーネントはすでに私のマシンにはインストールしてたので
この3つのうちどれに入っているかを確認することはできませんのでご了承のほど。
でも、名前からして2番目の「IIS 6.0 Resource Kit」をインストールすれば、
多分入っていると思われますので、まずこいつをインストールしてみてください。
インストールすると参照設定の「COM」タブに
「ms utility 1.0 type library - logparser interfaces collection」
というライブラリが追加されていると思いますので、これを参照設定に追加します。
そしたら、以下のサンプルプログラム(関数)をコピペして実行してみてください。

Public Sub GetLog(ByVal evtFileName As String)
Dim strSql As String = "SELECT * FROM " & evtFileName
Dim log As MSUtil.ILogQuery = New MSUtil.LogQueryClassClass
Try
Dim recSet As MSUtil.ILogRecordset = log.Execute(strSql)

'どんなフィールドがあるかはこいつのコメントはずして確認できます
'Dim colCnt As Integer = recSet.getColumnCount
'Dim cnt As Integer
'For cnt = 0 To colCnt - 1
' Debug.WriteLine(recSet.getColumnName(cnt))
'Next

'イベントログデータの表示(とりあえず4つのフィールドを表示)
While Not recSet.atEnd()
Dim rec As MSUtil.ILogRecord = recSet.getRecord()
Debug.WriteLine(String.Format("{0} {1} {2} {3}", rec.getValue("EventID"), rec.getValue("EventType"), rec.getValue("EventCategory"), rec.getValue("Message")))
recSet.moveNext()
End While
Catch ex As Exception
MessageBox.Show(ex.Message)
End Try
End Sub

GetLog("c:\test.evt")
てなかんじで実行します。

一応、フィールド(列)は以下のものがあるようです。
EventLog
RecordNumber
TimeGenerated
TimeWritten
EventID
EventType
EventTypeName
EventCategory
SourceName
Strings
ComputerName
SID
Message

[ メッセージ編集済み 編集者: gtk2k 編集日時 2005-09-20 13:04 ]

[ メッセージ編集済み 編集者: gtk2k 編集日時 2005-09-20 13:12 ]
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2005-09-20 13:29
gtk2kさんどうもありがとうございました、教えていただいた方法でデータ取得できました。

ちなみにIIS 6.0 Resource KitはWindows Server 2003とWindows XPにしか対応していないようですね
実際にはWindows2000サーバで実行するのですがWindows2000に対応したものも有るのでしょうか?
インスパ
大ベテラン
会議室デビュー日: 2002/08/30
投稿数: 125
投稿日時: 2005-09-20 13:58
自己解決です
Log Parser 2.2ならWindows2000に対応していましたのでそれだけダウンロードしてうまくいきました。
どうもありがとうございました

Log Parser 2.2
http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&displaylang=en
1

スキルアップ/キャリアアップ(JOB@IT)