VBScriptにて下記のようなことができるかどうか。教えてください。よろしくお願いします。


WindowsServer2003にて、あるアプリケーションのログ(ここではdummy.logとします。)
dummy.logの内容は下記のような感じです。
------------------------------------------------------------------------
2#2009-09-15 16:35:02.680#7442#通信#○○手順:S9で受信エラーが発生しました。\r\n
ユーザニモニック(USER )\r\nファイルニモニック(FILE )\r\n
転送方向:着呼集信\r\n回線情報ID(1137)\r\n
回線グループ名(CHAKU )\r\n
回線グループ番号(8)#○○待ちで受信エラーが発生しました。
------------------------------------------------------------------------
ログの先頭には、「2009-09-15 16:35:02」というように当日のタイムスタンプが入ります。
このタイムスタンプを見て、その当日だけの日付のログを全部コピーして、別ファイル名で保存し
その別ファイル名の中の特定の文字列を参照して、文字列があった場合「エラーがありました」
とか、文字列がない場合「エラーはありませんでした」とポップアップ表示させることは可能
でしょうか。

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 登録:
  • 終了:2009/09/17 13:38:43
※ 有料アンケート・ポイント付き質問機能は2023年2月28日に終了しました。

ベストアンサー

id:hissssa No.1

回答回数428ベストアンサー獲得回数129

ポイント120pt

試しに書いてみました。別ファイル出力はせずに直接確認してますが。

Set oFso = WScript.CreateObject("Scripting.FileSystemObject")

Set oText = oFso.OpenTextFile("dummy.log", 1)

Set oReg = new RegExp

oReg.pattern = "エラーが発生"     ←目標文字列を正規表現指定

strDate="2009-09-17"         ←目標日付を指定

bLogBlock=false

Do Until oText.AtEndOfStream

 strLine=oText.ReadLine

  If Left(strLine,10) = "----------" Then   ←行の先頭10文字が-なら区切り行

   bLogBlock=false

  ElseIf Left(strLine,10) = strDate Then   ←行の先頭が日付に一致したら、そこから区切り行までを検査対象に

   bLogBlock=true

  ElseIf bLogBlock=true and oReg.Test(strLine)=true Then    ←対象行について比較実施

   WScript.echo "エラーが発生しました"

  Exit Do

 End If

Loop

id:meichi

ありがとうございます。

strDate="2009-09-17"         ←目標日付を指定

目標日付の部分は当日っていうのもできるのでしょうか。

2009/09/17 13:08:20

その他の回答1件)

id:hissssa No.1

回答回数428ベストアンサー獲得回数129ここでベストアンサー

ポイント120pt

試しに書いてみました。別ファイル出力はせずに直接確認してますが。

Set oFso = WScript.CreateObject("Scripting.FileSystemObject")

Set oText = oFso.OpenTextFile("dummy.log", 1)

Set oReg = new RegExp

oReg.pattern = "エラーが発生"     ←目標文字列を正規表現指定

strDate="2009-09-17"         ←目標日付を指定

bLogBlock=false

Do Until oText.AtEndOfStream

 strLine=oText.ReadLine

  If Left(strLine,10) = "----------" Then   ←行の先頭10文字が-なら区切り行

   bLogBlock=false

  ElseIf Left(strLine,10) = strDate Then   ←行の先頭が日付に一致したら、そこから区切り行までを検査対象に

   bLogBlock=true

  ElseIf bLogBlock=true and oReg.Test(strLine)=true Then    ←対象行について比較実施

   WScript.echo "エラーが発生しました"

  Exit Do

 End If

Loop

id:meichi

ありがとうございます。

strDate="2009-09-17"         ←目標日付を指定

目標日付の部分は当日っていうのもできるのでしょうか。

2009/09/17 13:08:20
id:HALSPECIAL No.2

回答回数407ベストアンサー獲得回数86

ポイント120pt

VBScriptでの実現性ということでしたら、できると思います。

FileSystemObjectオブジェクトでログファイルを読む

エラー内容をチェックし、正規表現(RegExp)でログを抜き出して別ファイル出力

といった具合です。

タイムスタンプ毎のエラー内容が複数行にわたっているので、そのブロック単位でどう抜き出すかが考えどころくらいでしょうか。

いずれにしろ、もし作るのであれば、現物のログファイルを見てみないとキチンと動作するものを作るのは難しいと思います。

id:meichi

ありがとうございます。できることはできるのですね。

2009/09/17 13:13:23
  • id:kn1967
    VBScript側での処理だけを考えるのであれば、簡単な処理。

    ただし、「あるアプリケーション」というものがファイルロック等を、
    どのように行っているのかが判らないと、VBScript側でのログ取得失敗だけでなく、
    「あるアプリケーション」の動作にも影響を与えてしまう可能性があるため、
    うかつには答えられないと思う。
  • id:hissssa
    追加確認なのでコメントで。

    >目標日付の部分は当日っていうのもできるのでしょうか。

    もちろん出来ます。VBSのDateオブジェクトで当日のデータは得られますので、そこからログに一致する文字列を作ればOKです。ただ、"2009-09-01"のように、月・日が1桁の時に0を加える処理が少し面倒ですが。

    http://www.atmarkit.co.jp/fwin2k/tutor/cformwsh04/cformwsh04_04.html

  • id:meichi
    ありがとうございます。できそうだということは分かりましたので、ここで質問を
    終了します。
  • id:h_kondo
    windowsのログを操作(検索)するならVBscriptではなくログパーサーを使った方が楽ですよ。
    http://www.microsoft.com/downloads/details.aspx?FamilyID=890cd06b-abf8-4c25-91b2-f8d975cf8c07&DisplayLang=ja

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

回答リクエストを送信したユーザーはいません