2016-03-18 3 views
0

У меня есть try..catch заявление, и его не ловить, PS v4.try..catch не работает?

Function ReadFile ([string] $configfile) { 
    try { 
     [xml]$script:fileInfo = Get-Content $configFile 
    } catch { 
     Write-Host $_.Exception.Message 
    } 
} 

Он никогда не ловит, но это ошибки в консоли? Ниже ошибка консоли:

Get-Content : Cannot find path 'C:\test.xml' because it does not exist. 
At C:\test.ps1:3 char:29 
+  [xml]$script:fileInfo = Get-Content $configFile 
    + CategoryInfo   : ObjectNotFound: (C:\test.xml:String) [Get-Content], ItemNotFoundException 
    + FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand

ответ

4

Вы должны изменить вызов Get-Content так, что он прекращает выполнение, таким образом ошибка может быть поймана, добавить -ErrorAction остановить.

Function ReadFile ([string] $configfile) 
{ 
    Try { 
      [xml]$script:fileInfo = Get-Content $configFile -ErrorAction stop 
    } 
    Catch { 
      Write-Host $_.Exception.Message 
    } 
} 
+2

Перефразировать: Try-Catch работает только с завершающими исключениями. – Matt

+0

Это сработало! Есть ли способ установить это на глобальном уровне для конкретного скрипта? Или мне нужно указывать это каждый раз, когда я вызываю команду PS? Благодаря! – guht

+0

Существует несколько статей по сценариям в этом разделе, например [этот] (https://blogs.technet.microsoft.com/heyscriptingguy/2010/03/08/hey-scripting-guy-how-can-i- потребительная ErrorActionPreference к контрольно-командлет-обработки-из-ошибок /). –

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