• 締切済み

WSHでイベントログの自動保存

以下の運用をWSHで実行できないかと考えています。 (1)Windows2003Serverの指定場所に実行日の日付の名前を付けたフォルダを自動作成する。 (フォルダ名例 D:\Eventlog\20071211) (2)Windows2003Serverのイベントログを全種類、名前を付けてエクスポートする。ファイル名は、 "今日の日付"_"イベントログ名".evt (ファイル名例 2007_12_11_Application.evt etc...) エクスポート先は、(1)で作成したフォルダとする。 (3)エクスポートしたログファイルを1ファイルずつZIP形式で圧縮する。 最終的に D:\Eventlog\20071211フォルダ内に 2007_12_11_Application.ZIP 2007_12_11_Security.ZIP .... という形で全てのイベントログが圧縮されて保存させたいです。 すいませんが、上記一連の処理をWSHで実現する方法をご教授ください。宜しくお願いします。

みんなの回答

noname#219128
noname#219128
回答No.2

各所からソースを引っ張ってきて動作に必要な部分だけ抜き出すとこんな感じですかね。 説明は各所にあるので割愛させていただきます。 'エクスポートファイルパス Const EXP_FILE_PATH = "C:\eventLog.exp" 'ZIP圧縮ファイルパス Const ZIP_FILE_PATH = "C:\eventLog.zip" 'エベントログの区切り Const SPACER = " " 'イベントログのエクスポート Call expEventLog(EXP_FILE_PATH) 'zip圧縮 Call CreateZIP(ZIP_FILE_PATH, EXP_FILE_PATH) MsgBox "完了" 'イベントログの取得 Private Sub expEventLog(expFile)   Dim obj   For Each obj In GetObject("winmgmts:").InstancesOf("Win32_NTLogEvent")    If obj.Message <> "" Then    Call writeFile(expFile, obj.Category & SPACER & obj.EventCode & SPACER & obj.Message & SPACER & obj.RecordNumber & SPACER & obj.SourceName & SPACER & obj.TimeWritten & SPACER & obj.EventType & vbCrLf)    End If   Next End Sub 'ファイル書き出し Sub writeFile(fileName, data)   '追記モード   Const ForAppending = 8   'システム デフォルトを使ってファイルを開く   Const TristateUseDefault = -2   Dim fileObj   Set fileObj = WScript.CreateObject("Scripting.FileSystemObject")   Set file = fileObj.OpenTextFile(fileName, ForAppending, True, TristateUseDefault)   file.WriteLine data   file.Close   Set file = Nothing   Set fileObj = Nothing End Sub 'zip圧縮 Private Function CreateZIP(toZipFileName, fromZipFileName)   Dim m_objFso   Dim m_objShell   Set m_objFso = CreateObject("Scripting.FileSystemObject")   Set m_objShell = CreateObject("Shell.Application")   Dim l_objZIP   '初期値は不正値   CreateZIP = False   '書庫ファイルが存在していなければ作成を行う   If Not m_objFso.FileExists(toZipFileName) Then     'テキストファイルを作成する     m_objFso.CreateTextFile(toZipFileName, False).Write "PK" & Chr(5) & Chr(6) & String(18, 0)   End If   '書庫オブジェクトを取得する   Set l_objZIP = m_objShell.NameSpace(CStr(toZipFileName))   '書庫への追加を行う   l_objZIP.CopyHere fromZipFileName   'ここまで来たら、正常終了   CreateZIP = True     Set m_objFso = Nothing   Set m_objShell = Nothing End Function

Lamuette
質問者

お礼

回答ご丁寧に有難うございました。 頂いた情報を元に自分でも色々試してみます。 有難う御座いました。

noname#219128
noname#219128
回答No.1

(1)は説明するほどでもないので、 (2)から説明します。 (2)は以下のURLを参考にして下さい。 http://blog.so-net.ne.jp/nakagami/2005-07-25 (3)は以下のURLを参考にして下さい。 http://oshiete1.goo.ne.jp/kotaeru.php3?q=2006207

Lamuette
質問者

補足

リンク有難うございます。 頂いたリンクはチェック済みでしたが、 (2)のイベントログのエクスポート先を (1)の同じスクリプト内で自動作成したフォルダに指定する部分や (3)の(2)で自動でエクスポートされたファイルを圧縮する部分 (圧縮したいファイル名の指定の仕方、圧縮先の指定の仕方) などが知識不足の為不明でした。 という訳で(1)(2)(3)を個別にではなく、 (1)~(3)を一連の処理として実行する方法がないかと 思案しております。 この辺りお分かりでしたら、ご教授下さいませ。

関連するQ&A