| 
    
     |  | ▼cocoa さん: こんにちは。
 まずは解決されまして何よりです。
 
 > -------------------------------------------------------------------------
 > ホスト 'ServerName' の 'application' ログのイベントを一覧表示しています。
 > -------------------------------------------------------------------------
 
 この情報が早く欲しかったです(笑)
 
 初めてApplicationログをCSVに落とすプログラムを組んでみましたが
 Description内 に改行コードがあると
 CSVの体裁が崩れてしまったり、
 また先頭行と最終行に半角のスペースがあったりと
 何か変な仕様なのですね。
 
 cocoa さんの環境ですと Description が
 
 > 内容が、0____userName(_は半角スペース)です。
 
 という事なので、
 バッチファイルで何か特殊なアプリケーションのみ
 ログを抽出しているという事なのでしょうかね。
 
 
 Public Function AppLogInsert(Optional ServerName As String _
 , Optional UserName As String _
 , Optional PassWord As String _
 , Optional TargetDate As Date) As Boolean
 
 Const strFilePath = "C:\applog.log"
 
 Dim strCommand As String
 Dim Con As New ADODB.Connection
 Dim Rec As New ADODB.Recordset
 Dim txtData As String
 Dim FNo As Long
 Dim Cnt As Long
 Dim CommitFLG As Boolean
 
 On Error Resume Next
 Kill strFilePath
 On Error GoTo 0
 
 strCommand = ""
 
 If ServerName = "" Then
 strCommand = strCommand & " -S localhost "
 Else
 strCommand = strCommand & " -S " & ServerName & " "
 End If
 
 If UserName <> "" Then
 strCommand = strCommand & " -U " & UserName & " "
 End If
 
 If PassWord <> "" Then
 strCommand = strCommand & " -P " & PassWord & " "
 End If
 
 If TargetDate = 0 Then
 TargetDate = Date
 End If
 
 strCommand = strCommand & " /fi ""DateTime eq " _
 & Format(TargetDate - 1, "mm/dd/yyyy") & ",12:00:00PM-" _
 & Format(TargetDate, "mm/dd/yyyy") & ",11:59:59PM"""
 
 strCommand = " cscript //nologo " _
 & "%systemroot%\system32\eventquery.vbs " _
 & " -v /l application -fo list" _
 & strCommand & " > " & strFilePath
 
 CreateObject("WScript.Shell").Run "%ComSpec% /c " & strCommand, 0, True
 
 Set Con = CurrentProject.Connection
 
 If DCount("*", "MsysObjects", "Name ='T_ApplicationLog'") = 0 Then
 Con.Execute CreateTableApplog
 Else
 Con.Execute "DELETE FROM T_ApplicationLog"
 End If
 
 Rec.Open "T_ApplicationLog", Con, adOpenDynamic, adLockOptimistic
 
 FNo = FreeFile
 
 On Error GoTo ErrHndl:
 
 Open strFilePath For Input As #FNo
 Line Input #FNo, txtData
 Cnt = 1
 Con.BeginTrans
 Do Until EOF(FNo)
 Line Input #FNo, txtData
 Select Case txtData
 Case "情報: 指定の条件に当てはまる 'application' ログのレコードはありません。"
 Err.Raise 999, , "情報: 指定の条件に当てはまる 'application' ログのレコードはありません。"
 Case ""
 Case " "
 Rec.Update
 Case Else
 Select Case Left(txtData, 4)
 Case "Type"
 If CommitFLG = True Then
 Rec.Update
 Cnt = Cnt + 1
 CommitFLG = False
 End If
 Rec.AddNew
 Rec![Messege_ID] = Cnt
 Rec![Messege_Type] = Mid(txtData, 14)
 Case "Even"
 Rec![Messege_Event] = Mid(txtData, 14)
 Case "Date"
 Rec![Messege_DateTime] = Mid(txtData, 14)
 Case "Sour"
 Rec![Messege_Source] = Mid(txtData, 14)
 Case "ComputerName "
 Rec![Messege_ComputerName] = Mid(txtData, 14)
 Case "Cate"
 Rec![Messege_Category] = Mid(txtData, 14)
 Case "User"
 Rec![Messege_User] = Mid(txtData, 14)
 Case "Desc"
 Rec![Messege_Description] = Mid(txtData, 14)
 CommitFLG = True
 Case Else
 If CommitFLG = True Then
 Rec![Messege_Description] = Rec![Messege_Description] & vbCrLf & Mid(txtData, 14)
 End If
 End Select
 End Select
 Loop
 
 Close #FNo
 Rec.Close
 Set Rec = Nothing
 
 Con.CommitTrans
 Set Con = Nothing
 
 MsgBox "正常終了"
 Exit Function
 
 ErrHndl:
 
 Close #FNo
 Con.RollbackTrans
 Set Con = Nothing
 
 MsgBox Cnt & "行目で以下のエラーが発生したためロールバックしました。" & vbCrLf & _
 Err.Description, vbCritical
 
 End Function
 
 Function CreateTableApplog() As String
 Dim strSQL As String
 
 strSQL = ""
 strSQL = strSQL & " CREATE TABLE T_ApplicationLog("
 strSQL = strSQL & " Messege_ID Long "
 strSQL = strSQL & " ,messege_Type Text(10) "
 strSQL = strSQL & " ,messege_Event Long "
 strSQL = strSQL & " ,Messege_DateTime Date "
 strSQL = strSQL & " ,messege_Source Text(50) "
 strSQL = strSQL & " ,Messege_ComputerName Text(50) "
 strSQL = strSQL & " ,Messege_Category Text(50) "
 strSQL = strSQL & " ,Messege_USER Text(50)"
 strSQL = strSQL & " ,Messege_Description Memo "
 strSQL = strSQL & " ,CONSTRAINT PK PRIMARY KEY (Messege_ID))"
 
 CreateTableApplog = strSQL
 End Function
 
 
 > インポートするたびにバッチ処理を動かしていると、
 > サーバーに負荷がかかりすぎる為、
 
 という事を考慮して日付を指定して1日分のみ
 アプリケーションログを取ってくるようなコードです。
 
 全てのアプリケーションログを取ってくる仕様ですし、
 DateTime や Description は分割しておりませんが
 何かしらの参考になれば幸いです。
 
 Call AppLogInsert("192.168.0.100", "Domain\User", "PWD", #12/11/2009#)
 
 の様に呼び出してみて下さい。
 
 
 |  |