CScript / WScript Предотвратить блокировку ошибки - PullRequest
6 голосов
/ 18 сентября 2008

В настоящее время WScript выскакивает окно сообщения при возникновении ошибки сценария. Эти сценарии вызываются другими процессами и запускаются на сервере, поэтому нет никого, кто мог бы закрыть окно с ошибкой.

Я хотел бы, чтобы сообщение об ошибке было выгружено в STDOUT, и выполнение для возврата вызывающего процесса. Всплывающий как MSGBox просто зависает целиком.

Идеи? * * 1005

Ответы [ 6 ]

4 голосов
/ 16 октября 2008

Вот как вы должны запускать пакетные задания скрипта:

cscript //b scriptname.vbs
2 голосов
/ 18 сентября 2008

Не используйте WScript; использовать CScript. В командной строке Windows введите следующее для отображения справки.

cscript //?
Я предлагаю следующее:
cscript //H:CScript
Это сделает CScript вашим интерпретатором сценариев по умолчанию. CScript печатает сообщения на консоль (т. Е. Стандартный вывод) по вашему желанию. (Он не использует диалоговые окна.) Возможно, вы также захотите попробовать переключатель // B, но я не могу сказать, должен ли он выполняться для каждого сценария или нет. Если это постоянный одноразовый переключатель, такой как переключатель // H, то это может сработать для вас; если нет, вам может потребоваться изменить все ваши удаленные программы, чтобы включить его. Исходя из предоставленной вами информации, я думаю, что просто изменение интерпретатора по умолчанию (// H) сделает то, что вы хотите.

Вам также понадобится добавить какую-то обработку ошибок, чтобы не допустить завершения скрипта при ошибке. В Visual Basic Scripting Edition, если вы просто хотите игнорировать ошибки, проще всего добавить следующее в начало вашего скрипта.

On Error Resume Next
См. http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx для получения дополнительной информации.
1 голос
/ 18 сентября 2008

Используйте WScript.Echo вместо MsgBox. И запустите скрипт, используя CSCRIPT вместо WSCRIPT.

0 голосов
/ 01 сентября 2011

Я предлагаю вам поместить свой код скрипта в Sub - например, DoWork - и код вашего скрипта что-то вроде:

On Error Resume Next

DoWork

If Err.Number <> 0 Then

    If "CSCRIPT.EXE" = UCase( Right( WScript.Fullname, 11 ) ) Then
        WScript.StdErr.Write Err.Number & ": " & Err.Description
    Else
        WScript.Echo Err.Number & ": " & Err.Description
    End If
    WScript.Quit 1
End If

Private Sub DoWork

    ... your code ...

End Sub

Таким образом, когда вы запускаете ваш скрипт, используя cscript //b, и он терпит неудачу, вы получите сообщение об ошибке, выводимое на stderr, и вызывающая сторона получит ненулевой уровень ошибки.

0 голосов
/ 18 сентября 2008

не делайте этого:

VBScript: При ошибке возобновить следующее

английский: «когда у вас есть ошибка, игнорируйте ее и продолжайте.»

0 голосов
/ 18 сентября 2008

Вы не указали, какой язык вы используете. Если вы используете VBScript, вы можете написать обработчик ошибок, используя оператор On Error ... . Если вы используете JScript, вы можете использовать try {} catch (x) {} block.

...