2013-12-17 4 views
1

У меня есть простой сценарий powershell, который вызывает скрипт perl. когда скрипт perl терпит неудачу, я хотел бы поймать ошибку и поместить ее в переменную.catch perl errors from powershell script

Следующая на самом деле работает, когда я запускаю его из PowerGUI:

try 
{ 

$erroractionpreference = "Stop" 
perlexe c:\perlscript.pl -perlparameters param1 
} 
catch 
{ 
$perlerror = $_.Exception.Message; 

} 

, но когда я запускаю его из команды Powershell предложит $ perlerror переменная не заполняется с сообщением об ошибке.

любой знает почему? есть лучший способ, чтобы я мог поймать ошибки perl?

+1

Dup of http://stackoverflow.com/questions/8184827? – ikegami

ответ

1

Оператор try...catch обрабатывает только исключения в контексте Powershell. Perlexe запускает скрипт Perl, и любые исключения, возникающие в части Perl, обрабатываются в процессе Perlexe. Никакое исключение не вернется к Powershell. Все, что вы можете получить, это текстовые сообщения об ошибках, напечатанные либо на stdout, либо на stderr.

Чтобы записать stdout и stderr, используйте синтаксис, в который вставляются ikegami. Например,

$cmdOutput = perlexe c:\perlscript.pl -perlparameters param1 2>&1