CScript / WScript impedir um erro de ser bloqueio
-
01-07-2019 - |
Pergunta
Atualmente, WScript aparece caixa de mensagem quando há um erro de script. Esses scripts são chamados por outros processos e estão correndo em um servidor, portanto, não há ninguém para descartar a caixa de erro.
O que eu gostaria é para a mensagem de erro a ser despejado para STDOUT, e execução para retornar o processo de chamada. Popping como um MSGBOX só trava a coisa toda.
Idéias?
Solução
Isto é como você deve estar executando trabalhos em lote de script:
cscript //b scriptname.vbs
Outras dicas
Não use WScript; usar CScript. No comando do Windows prompt, digite o seguinte para exibir a ajuda.
cscript //?
Eu sugiro o seguinte:
cscript //H:CScript
Isso fará com que CScript seu interpretador de script padrão. CScript imprime mensagens para o console (ou seja, stdout) como você deseja. (Não usar janelas de diálogo.)
Você também pode querer experimentar o interruptor // B, mas não posso dizer se isso tem que ser executado por script ou não. Se é um interruptor persistente, de uma só vez como o interruptor // H é, em seguida, isso pode funcionar para você; se não, você pode precisar modificar todos os seus programas remotos para incluí-lo. A partir da informação fornecida, acho que apenas mudando o intérprete padrão (// H) vai fazer o que quiser.
Você também vai precisar adicionar algum tipo de tratamento de erros para manter o script de terminar em um erro. Em Visual Basic Scripting Edition, a coisa mais fácil de fazer se você só quer ignorar erros é adicionar o seguinte para o topo do seu script.
On Error Resume Next
Consulte http://msdn.microsoft.com/en- us / library / 53f3k80h (VS.85) .aspx para obter mais informações.
Use WScript.Echo vez de MsgBox. E, executar o script usando CSCRIPT vez de WSCRIPT.
Você não declararam o idioma que você está usando. Se você estiver usando VBScript, você pode escrever um manipulador de erro usando o On Error ... comunicado. Se você estiver usando JScript, você pode usar um try {} catch (x) {} bloco.
não fazer isso:
VBScript: No currículo de erro próxima
Inglês: "Quando você tem um erro, ignorá-lo e só vai manter."
Eu sugiro que você colocar o seu código de script em um Sub - por exemplo, DoWork
- e código de script algo como:
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
Desta forma, quando você executar o script usando cscript //b
, e ele falhar, você terá uma saída de mensagem de erro para stderr e o chamador receberá um não-zero errorlevel.