cscript — недопустимый вызов процедуры или аргумент при запуске файла vbs

Я пытался использовать 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 по-прежнему работает нормально:

введите здесь описание изображения

Что может быть причиной этого?


person quanta    schedule 18.11.2011    source источник
comment
Это действительно должно быть задано на SO.   -  person    schedule 18.11.2011
comment
Определенно больше ТАК вопрос ИМО.   -  person David Spillett    schedule 18.11.2011


Ответы (2)


IIRC (53,1) указывает, что ошибка находится в строке 53. На данный момент ожидается, что массив совпадений регулярных выражений по крайней мере с одним элементом (индекс 0) и одним подсовпадением (т.е. объект в позиции 0 в массив имеет свойство массива, называемое SubMatches, по крайней мере с одним элементом в нем.

Это не проверка наличия и правильности этой структуры перед попыткой ее использования.

Я предполагаю, что вызов регулярного выражения не может найти ничего подходящего, предположительно, потому, что входная строка не соответствует ожидаемому формату. Вы можете вывести содержимое strOutput перед этой строкой, чтобы увидеть, что она содержит — это может быть представление даты/времени в локализованной форме, отличной от той, для которой предназначено регулярное выражение. Вы также можете выводить содержимое input после каждого вызова objProc.StdOut.ReadLine — это покажет вам, возвращал ли вызов w32tm.exe полезное сообщение об ошибке, которое пропускается сценарием, который просто ищет возвращаемое значение, когда все в порядке, и игнорирует возможность разного выхода.

person David Spillett    schedule 18.11.2011

Виновником является аргумент /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;
person quanta    schedule 18.11.2011
comment
Не знаю, почему моя версия w32tm не предоставляет аргумент /nowarn (w32tm /? | findstr nowarn ничего не возвращает). Я использую Windows Server 2003, версия [5.2.3790], пакет обновления 2. - person quanta; 18.11.2011