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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top