- 締切済み
eventquery.vbsとバッチの使い方について教えて下さい。
初めての投稿致します。 よろしくお願いします。 現在Windows2003 Server SP2 R2(ENG)の環境のサーバーのイベントログを取得したいと思っており、eventquery.vbsを使用してバッチを作成しているのですが、下記点が突破できずにいます。 どのように改善したらよいか教えて頂けますでしょうか? やりたいこと ・月曜日に実行するときには金曜日、土曜日、日曜日分のイベント(エラー、警告)を取得したい。 ・火曜日、水曜日、木曜日、金曜日は1日前のイベントを取得したい。 現在は単純に全てのイベント(エラー、警告)を取得する。だけのバッチファイルしか作成出来ておりません。 下記のようなバッチです。 ------------------------------------------------------------ @echo on @REM ------------------------------- 日時 SET YYYYMMDD=%date:~-10,4%%date:~-5,2%%date:~-2,2% SET HHMM=%time:~0,2%%time:~3,2% SET FNAME=%YYYYMMDD: =%_%HHMM: =0% @REM ------------------------------- ホスト/出力先、出力ログファイル SET VBSP=c:\windows\system32\eventquery.vbs SET H1=server1 SET LOG=C:\command\%FNAME%_Event_log.csv @REM ------------------------------- 実行日時 @echo %date% %Time:~0,5% に実行しました。> %LOG% @REM ------------------------------- server1出力結果 cscript %VBSP% /s %H1% /fi "type eq warning" /l system /fo csv /v >> %LOG% cscript %VBSP% /s %H1% /fi "type eq Error" /l system /fo csv /v >> %LOG% cscript %VBSP% /s %H1% /fi "type eq warning" /l application /fo csv /v >> %LOG% cscript %VBSP% /s %H1% /fi "type eq Error" /l application /fo csv /v >> %LOG% どのようにすればよいのでしょうか? お手数ですが、ご教授お願い致します。
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- dsuekichi
- ベストアンサー率64% (171/265)
> eventquery.vbs上の定義としていつからいつまでという形で定義されているため終了日時も設定しないとダメみたいなんです。。 はて?XP用のeventquery.vbsにはそういう制限は無いですけど。 2003Server用のeventquery.vbsは、XP用と仕様が違うんですかね・・・ > 、「エラー: 指定した 'DATETIME' 形式は無効です。形式: 月/日/年、時:分:秒AM(/PM) (2 桁の数字で指定、年は 4 桁指定可能)」と表示されます。 実際に、どのような引数(条件)が、eventquery.vbsに渡しています?
- dsuekichi
- ベストアンサー率64% (171/265)
> >#「終了時刻を指定しない」と言う手も・・・ > これはeventquery.vbsの構成上?終了時刻も表記しないとダメみたいなので出来ませんでした。。。 失礼。書き間違えました。 「終了日時の条件から、終了時刻を外す」ではなく、 「終了日時の条件そのものをしない」と言う意味です。 > ログを取得する際に取得終了時間の設定を実行時間(現時間)にすると取得できず、エラーになってしまいます。 2003Serverは持っていないので、XPで試しましたが、 エラーにはなりませんね・・・ なんというエラーですか?
お礼
こんにちわ。 毎回早急なご回答ありがとうございます。 「終了日時の条件そのものをしない」ということですが、eventquery.vbs上の定義としていつからいつまでという形で定義されているため終了日時も設定しないとダメみたいなんです。。 まだ自分にはeventquery.vbsそのものを書き換える程の知識がないためおとなしく定義に従おうと思います。 > ログを取得する際に取得終了時間の設定を実行時間(現時間)にすると取得できず、エラーになってしまいます。 エラーは、「エラー: 指定した 'DATETIME' 形式は無効です。形式: 月/日/年、時:分:秒AM(/PM) (2 桁の数字で指定、年は 4 桁指定可能)」と表示されます。 なぜでしょうか?何度試しても終了時刻を実行時間にすると上記エラーになってしまいます。(1時間前の時間に設定すると問題なしなので記述間違いはないと思います。)
- dsuekichi
- ベストアンサー率64% (171/265)
> 前日の12時(0時)からバッチ実行時間までのログを取得しようとするときに 「1日前のイベント」じゃあ・・・ > そのため自動で、例えば02/20/2008,14:53:00PMという風に表記させるにはどのようにすればよいのでしょうか? 「AM/PMの判定」って事なら、「時」が、12より大きいか小さいかで判断できるのでは? #あざとい方法で行くなら・・・ #「現在時刻以降のログは出力されていないはず」なので、 #「終了時刻を指定しない」と言う手も・・・
お礼
dsuekichiさん こんにちわ 早急なご回答ありがとうございました! AM/PM自動表記ですが、IFとGOTOコマンドで分岐させてAM/PM判定をさせるようにしました。 >#「現在時刻以降のログは出力されていないはず」なので、 >#「終了時刻を指定しない」と言う手も・・・ これはeventquery.vbsの構成上?終了時刻も表記しないとダメみたいなので出来ませんでした。。。 また問題が発生したんですが。。。(何度もすいません。) ログを取得する際に取得終了時間の設定を実行時間(現時間)にすると取得できず、エラーになってしまいます。ただ終了時刻を実行時間の1時間前にすると取得できるという現象が。。。 実行時間までのログの取得をしたい場合はどうすればよいのでしょうか? もし何かご存知であればご教授お願い致します。
- dsuekichi
- ベストアンサー率64% (171/265)
> (2)の前日(orN日前)の求め方 > 書かれている記述の意味?構成?が理解できず、 > ただ貼り付ければよいものでもなかったみたい 一番手っ取り早いのは、「別のBATファイルにしてCALLで呼び出す」ですかね・・・ #組み込むこともできますが一寸面倒なので。 > (3)のeventquery.vbsへの渡し方です。 > エラー: 指定した 'DATETIME' 形式は無効です。形式: 月/日/年、時:分:秒AM(/PM) (2 桁の数字で指定、年は 4 桁指定可能) メッセージの通り、「月/日/年、時:分:秒AM(/PM)」で指定してください。 (http://technet2.microsoft.com/WindowsServer/ja/library/68672494-7700-4cbf-8392-4b6ef87b87491041.mspx?mfr=true) の例にあるように、「2000年8月3日18時20分より後」なら、 --------------------------------------------------------- eventquery /fi "Datetime gt 08/03/00,06:20:00PM" ~ --------------------------------------------------------- の様に指定します。 #「前日の00時00分以降(ge)」と「当日の00時00分より前(lt)」を指定すればよさそうですけど。 つまり、「当日日付」「前日日付」から、こういう文字列を作成して指定してください。
お礼
dsuekichiさん。 こんにちわ。 早速のご回答ありがとうございます。 そのまま日時指定をしてできました。もっとしっかりエラーメッセージを読み理解するようにします。 お蔭様でイベントログの取得が出来ました。 お手数おかけ致しました。 また追加で質問なのですが、この日時指定の際にAM/PMも合わせて指定するようになっているのですが、前日の12時(0時)からバッチ実行時間までのログを取得しようとするときに、実行する時間によっては実行日時とAM/PMの表記を毎回変えなければなりません。そのため自動で、例えば02/20/2008,14:53:00PMという風に表記させるにはどのようにすればよいのでしょうか? 重ね重ねお手数をおかけ致しますが、ご教授の程、よろしくお願いします。
- dsuekichi
- ベストアンサー率64% (171/265)
どこが分からないのでしょう? (1)曜日の求めかた? (2)前日(orN日前)の求め方? (3)eventquery.vbsへの条件の渡し方? (1)(2)は、ネットで探したらサンプル見つかりますね。 例えば(http://homepage1.nifty.com/jak/batch/date.html) (3)は、/fi オプションを追加すればよさそうですけど・・・
補足
dsuekichiさん ご返信ありがとうございます。 まだバッチ作成初心者のため伝え方や足りない情報があるかも知れません。。。 わからないのは(2)の前日(orN日前)の求め方と求めた後の(3)のeventquery.vbsへの渡し方です。 サンプルのサイトを見たのですが、基本的なところと思いますが、書かれている記述の意味?構成?が理解できず、ただ貼り付ければよいものでもなかったみたい(実際貼り付けて試してみました。)で、わかりませんでした。。。 一応(1)はおそらく出来たと思うのですが、、、 サンプルであるページは見たのですが、eventquery.vbsに渡すときに、/if "DATETIME"を使うとは思うのですが、「エラー: 指定した 'DATETIME' 形式は無効です。形式: 月/日/年、時:分:秒AM(/PM) (2 桁の数字で指定、年は 4 桁指定可能)」と表示されてしまい、ログが収集できない状態です。 このメッセージが出た時のバッチは下記の通りです。 -------------------------------------------------- @echo OFF @REM ------------------------------- 日時 SET YYYYMMDD=%date:~-10,4%%date:~-5,2%%date:~-2,2% SET HHMM=%time:~0,2%%time:~3,2% SET FNAME=%YYYYMMDD: =%_%HHMM: =0% @REM ------------------------------- 前日を求める @REM ここに前日を求めるコマンドを記述すると思われる。 @REM ------------------------------- ホスト/出力先、出力ログファイル SET VBSP=c:\windows\system32\eventquery.vbs SET H1=server1 SET LOG=C:\command\%FNAME%_Event_log.csv @REM ------------------------------- 曜日別処理分岐 cscript /b c:\command\weekday.vbs if errorlevel 7 GOTO END if errorlevel 6 GOTO TDL_1day_event&GOTO END if errorlevel 5 GOTO TDL_1day_event&GOTO END if errorlevel 4 GOTO TDL_1day_event&GOTO END if errorlevel 3 GOTO TDL_1day_event&GOTO END if errorlevel 2 GOTO TDL_3day_event&GOTO END if errorlevel 1 GOTO END @REM ------------------------------- 火、水、木、金の実行コマンドライン(前日分取得) :TDL_1day_event @REM ------------------------------- 実行日時 @echo %date% %Time:~0,5% に実行しました。> %LOG% @REM ------------------------------- server1出力結果 cscript %VBSP% /s %H1% /fi "type eq warning" /fi "datetime %前日を求めた答えを入れる?ただ範囲をどう指定すればよいのかが不明。%" /l system /fo csv /v >> %LOG% ~~~~~~~~~~~~~~~以下省略~~~~~~~~~~~~~ お手数をおかけ致しますが、ご教授の程よろしくお願いします。
お礼
ご返信ありがとうございます。 > eventquery.vbs上の定義としていつからいつまでという形で定義されているため終了日時も設定しないとダメみたいなんです。。 > 実際に、どのような引数(条件)が、eventquery.vbsに渡しています? 条件:fi "datetime eq 02/21/2008,10:00:00AM-02/22/2008,10:00:00AM"です。 演算子をeqにしていたのが原因でした。。。演算子gtを使用して取得開始時間だけに記述を修正し解決しました。 指定日時ばかりに意識しすぎてました。お手数をおかけしました。 何度もご教授頂きありがとう御座いました。