0

check_time.vbsを使用してWindowsの時刻を確認しようとしています。

スクリプトは次のとおりです:http://pastebin.com/NfUrCAqU

ヘルプメッセージが表示される可能性があります。

C:\Program Files\NSClient++\scripts>cscript //NoLogo check_time.vbs /?
check_time.vbs V1.01
Usage: cscript /NoLogo check_time.vbs serverlist warn crit [biggest]

Options:
 serverlist (required): one or more server names, coma-separated
 warn  (required): warning offset in seconds, can be partial
 crit  (required): critical offset in seconds, can be partial
 biggest (optional): if multiple servers, else use default least offset

Example:
cscript /NoLogo check_time.vbs myserver1,myserver2 0.4 5 biggest

しかし、実行すると次のエラーが発生します。

C:\Program Files\NSClient++\scripts>cscript //NoLogo check_time.vbs 0.asia.pool.ntp.org 20 50
C:\Program Files\NSClient++\scripts\check_time.vbs(53, 1) Microsoft VBScript run
time error: Invalid procedure call or argument

スクリーンショット:

ここに画像の説明を入力してください

手動で実行しw32tmても正常に機能します。

ここに画像の説明を入力してください

これの原因は何でしょうか?

4

2 に答える 2

0

IIRC(53,1)は、エラーが53行目にあることを示します。この時点で、正規表現の配列が少なくとも1つの項目(インデックス0)および1つのサブ一致(つまり、 arrayには、少なくとも1つのアイテムを含むSubMatchesという配列プロパティがあります。

使用する前に、この構造が存在し、正しいことを確認することはありません。

私の仮定では、おそらく入力文字列が期待される形式ではないために、正規表現呼び出しが一致するものを見つけることができません。その行の前のコンテンツを出力して、その内容strOutputを確認できます。これは、正規表現が設計されているものとは異なるローカライズされた形式の日付/時刻表現である可能性があります。inputを呼び出すたびに、の内容を出力することもできobjProc.StdOut.ReadLineます。これにより、呼び出しがw32tm.exe有用なエラーメッセージを返し、スクリプトによってスキップされ、すべてが正常な場合に返される値を探し、次の可能性を無視するかどうかが示されます。異なる出力。

于 2011-11-18T09:52:56.743 に答える
0

犯人は/nowarn議論です:

w32tm /monitor /nowarn /computers:0.asia.pool.ntp.org
The following arguments were unexpected: /nowarn
Exiting with error 0x80070057

スクリプトから削除すると、機能するようになります。

cscript //NoLogo check_time.vbs 0.uk.pool.ntp.org 20 50
NTP OK: Offset -2.4262131 secs|'offset'=-2.4262131s;20;50;
于 2011-11-18T10:09:28.800 に答える