¿Intentar Catch en el exe ejecutable en Powershell?

Quiero hacer un Try Catch en un .exe en Powershell, lo que tengo se ve así:

Try
{
    $output = C:\psftp.exe ftp.blah.com 2>&1
}
Catch
{
    echo "ERROR: "
    echo $output
    return
}

echo "DONE: "
echo $output

Cuando uso un dominio no válido, devuelve un error como psftp.exe : Fatal: Network error: Connection refused pero mi código no está captando eso.

¿Cómo detectaría los errores?

preguntado el 10 de septiembre de 12 a las 22:09

2 Respuestas

try / catch en PowerShell no funciona con ejecutables nativos. Después de realizar la llamada a psftp.exe, verifique la variable automática $LastExitCode. Eso contendrá el código de salida de psftp, por ejemplo:

$output = C:\psftp.exe ftp.blah.com 2>&1
if ($LastExitCode -ne 0)
{
    echo "ERROR: "
    echo $output
    return
}

La secuencia de comandos anterior supone que el exe devuelve 0 en caso de éxito y distinto de cero en caso contrario. Si ese no es el caso, ajuste el if (...) condición en consecuencia.

Respondido el 11 de Septiembre de 12 a las 03:09

Debo decir que en mi caso tengo un ejecutable que, para propuestas de prueba, lanzo una excepción al principio del código y cuando mi script de powershell se ejecuta aparece una ventana emergente debido a la excepción y tengo que hacer clic en el botón para Seguir. El punto aquí es que la excepción no se captura en la instrucción if ni en un bloque try catch. - rodrigocampos

> Try/catch en PowerShell no funciona con ejecutables nativos.

En realidad lo hace, pero solo si usa "$ErrorActionPreference = 'Stop'" Y agrega "2>&1".

Consulte "Manejo de comandos nativos" / Tobias Weltner en https://community.idera.com/database-tools/powershell/powertips/b/ebookv2/posts/chapter-11-error-handling.

P.ej

$ErrorActionPreference = 'Stop'
Try
{
    $output = C:\psftp.exe ftp.blah.com 2>&1
}
Catch
{
    echo "ERROR: "
    echo $output
    return
}
echo "DONE: "
echo $output

contestado el 08 de mayo de 20 a las 08:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.