2016-03-20 5 views
0

Если я запуска этой функции (с из try..catch):Поймать ошибки от внешней команды

executezipFullBackup -PathFileLocation "Z:\" -PathSaveBackup "E:\" -NameOfBackup "MyNASStorage" 

PoweShell дать мне эту ошибку:

sz : 
At C:\PowerShellF\zipFunction.ps1:6 char:9 
+   sz a -t7z "$PathSaveBackup\$NameOfBackup" "$PathFileLocation" #backup 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:String) [], RemoteException 
    + FullyQualifiedErrorId : NativeCommandError 

ERROR: 
Duplicate filename on disk: 
BackupTest\private\103.tmp\usr\bin\mail 
BackupTest\private\103.tmp\usr\bin\Mail

И эта ошибка хорошо для меня, потому что я знаю что на этом шаге не так.

Но моя проблема в том, что если я поместил этот скрипт в try..catch, я не получу эту ошибку. Пример:

$ErrorActionPreference = "Stop";  #this is for Try Catch 
try { 
    zipFullBackup -PathFileLocation "$PathFileLocation" -PathSaveBackup "$PathSaveBackup" -NameOfBackup "$NameOfBackup"   
} catch { 
    $MyError = ($Error[0] | Out-String); 
    Write-Host "$MyError" 
} 

Я получаю сообщение об ошибке, как это:

sz : 
At C:\PowerShellF\zipFunction.ps1:6 char:9 
+   sz a -t7z "$PathSaveBackup\$NameOfBackup" "$PathFileLocation" #backup 
+   ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 
    + CategoryInfo   : NotSpecified: (:String) [], RemoteException 
    + FullyQualifiedErrorId : NativeCommandError

Эта ошибка не достаточно для меня, потому что я не вижу ОШИБКА! Я не вижу в этом:

ERROR: 
Duplicate filename on disk: 
BackupTest\private\103.tmp\usr\bin\mail 
BackupTest\private\103.tmp\usr\bin\Mail

Как я могу получить try..catch отобразить эту ошибку?

+0

что «executezipFullBackup»? Это exe, командный файл, другой? –

ответ

-1

Это сообщение об ошибке не является частью ошибки/исключения PowerShell, но само сообщение 7zip печатает в STDOUT. Поэтому он не может быть захвачен блоком try..catch, даже если вы установили $ErrorActionPreference = 'Stop'.

Что вы можете сделать, это собрать выходные данные команды в переменной, хотя:

$msg = zipFullBackup ... 
+0

Несмотря на то, что это не ошибка/исключение powershell, она останавливает программу и входит в раздел «Catch». Если вы исключите блок catch try, программа выйдет с дополнительной информацией, чем вы можете выйти из переменной $ Error. Вопрос OP состоял в том, как получить эту информацию. – Ratzor

+0

Как команда выводит больше информации на консоль после того, как она сделала бросок? Что-то здесь не имеет смысла. –

+0

Без блока catch try, когда программа выходит из строя, она отображает некоторую информацию. Вопрос в том, как получить эту информацию без сбоев в программе .... Значение в catch – Ratzor

Смежные вопросы