cscript - 运行vbs文件时无效的过程调用或参数

时间:2011-11-18 08:18:27

标签: windows-server-2003 nagios vbscript

我一直在尝试使用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

截图:

enter image description here

手动执行w32tm仍然可以正常运行:

enter image description here

这可能是什么原因?

2 个答案:

答案 0 :(得分:0)

IIRC(53,1)表示该错误在第53行。此时它期望与至少一个项目(索引0)和一个子匹配(即位置中的对象)的正则表达式匹配数组数组中的0有一个名为SubMatches的数组属性,其中至少包含一个项目。

在尝试使用之前,没有检查以确保此结构存在且正确。

我的假设是regexp调用无法找到匹配的内容,大概是因为输入字符串不是预期的格式。您可以在该行之前输出strOutput的内容以查看它包含的内容 - 它可以是与正则表达式设计的不同的本地化形式的日期/时间表示。您还可以在每次调用input后输出objProc.StdOut.ReadLine的内容 - 这会显示对w32tm.exe的调用是否返回了脚本跳过的有用错误消息,即只是在一切顺利时寻找返回的值,忽略不同输出的可能性。

答案 1 :(得分: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;