CScript/WScript Предотвратить блокировку ошибки
-
01-07-2019 - |
Вопрос
В настоящее время WScript отображает всплывающее окно сообщения при возникновении ошибки сценария.Эти сценарии вызываются другими процессами и запускаются на сервере, поэтому никто не может закрыть окно ошибки.
Мне бы хотелось, чтобы сообщение об ошибке было выгружено в STDOUT, а выполнение вернуло вызывающий процесс.При появлении MSGBox все это просто зависает.
Идеи?
Решение
Вот как вам следует запускать пакетные задания сценариев:
cscript //b scriptname.vbs
Другие советы
Не используйте WScript;используйте CScript.В командной строке Windows введите следующую команду, чтобы отобразить справку.
cscript //?
Я предлагаю следующее:cscript //H:CScript
Это сделает CScript вашим интерпретатором сценариев по умолчанию.CScript выводит сообщения на консоль (т. е. стандартный вывод) по вашему желанию.(Он не использует диалог Windows.) Вы также можете попробовать переключатель // b, но я не могу сказать, должен ли это быть запускать для для мышления или нет.Если это постоянный одноразовый переключатель, такой как переключатель //H, то это может сработать для вас;в противном случае вам может потребоваться изменить все ваши удаленные программы, чтобы включить его.Судя по предоставленной вами информации, я думаю, что простое изменение интерпретатора по умолчанию (//H) сделает то, что вы хотите.
Вам также потребуется добавить какую-то обработку ошибок, чтобы скрипт не завершался в случае ошибки.Если вы просто хотите игнорировать ошибки в Visual Basic Scripting Edition, проще всего добавить следующее в начало вашего скрипта.
On Error Resume Next
Видеть http://msdn.microsoft.com/en-us/library/53f3k80h(VS.85).aspx Чтобы получить больше информации.
Используйте WScript.Echo вместо MsgBox.И запустите сценарий, используя CSCRIPT вместо WSCRIPT.
Вы не указали, какой язык используете.Если вы используете VBScript, вы можете написать обработчик ошибок, используя При ошибке... заявление.Если вы используете JScript, вы можете использовать попробуй {} поймай (x) {} блокировать.
не делай этого:
vbscript:При ошибке продолжить дальше
английский:«Когда у вас возникает ошибка, игнорируйте ее и просто продолжайте работу».
Я предлагаю вам поместить код вашего сценария в 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, а вызывающая сторона получит ненулевой уровень ошибки.