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 行。此时,它期望一个正则表达式数组与至少一项(索引 0)和一个子匹配项(即位置 0 中的对象)匹配array 有一个名为 SubMatches 的数组属性,其中至少包含一项。

在尝试使用它之前,它不会检查以确保该结构存在且正确。

我的假设是 regexp 调用找不到任何匹配的内容,大概是因为输入字符串不是预期的格式。您可以输出该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 回答