2012-09-10 8 views
8

chcę zrobić jakiś haczyk przymierzyć .exe w PowerShell, co mam wygląda następująco:Spróbuj Catch na wykonywalnych exe w Powershell?

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

echo "DONE: " 
echo $output 

Gdy używam powiedzieć nieprawidłową domenę, to zwraca błąd jak psftp.exe : Fatal: Network error: Connection refused ale mój kod nie jest zaraźliwy że.

Jak złapię błędy?

Odpowiedz

15

try/catch w PowerShell nie działa z natywnymi plikami wykonywalnymi. Po nawiązaniu połączenia z plikiem psftp.exe sprawdź automatyczną zmienną $LastExitCode. Który będzie zawierał psftp Kod wyjście np .:

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

Skrypt powyżej zakłada, że ​​powraca exe 0 w przypadku powodzenia i niezerowej inaczej. Jeśli tak nie jest, dostosuj odpowiednio stan if (...).