2016-12-11 2 views
0

Я пытаюсь сделать команду trap, которая ловут исключение, что файл не найден. Это код:Я не понимаю, как работает ловушка

Trap { 
    Clear-Host 
    Write-Host "The file you are looking for does not exist" 
} 

Get-ItemProperty C:\fake 

Я не понимаю, как это сделать?

+0

'Get-ItemProperty C: \ fake -ErrorAction Stop' – beatcracker

+0

Я предлагаю вам работать через «get-help trap -sh» – LotPings

+0

@ user2120893 Не могли бы вы обновить свой вопрос, включив в него фактические проблемы или как поведение не соответствовало вашим ожиданиям? Это поможет другим пользователям с аналогичными проблемами найти (и повысит ;-) ваш вопрос, например, не удалось ли ловушке ловить ошибки; У вас возникли проблемы с тем, как ошибка добралась до вызывающего? И т. Д. – jpaugh

ответ

4

Ловушки выполняются только на прерывающие ошибки (ошибки, которые останавливают конвейер), поэтому сначала вам нужно изменить поведение ErrorAction нарушившей командлета:

Trap { 
    Clear-Host 
    Write-Host "The file you are looking for does not exist" 
} 

Get-ItemProperty C:\fake -ErrorAction Stop 

Чтобы подавить запись об ошибке из впоследствии барботирования до вызывающий абонент, возврат из текущей области внутри ловушки:

Trap { 
    Clear-Host 
    Write-Host "The file you are looking for does not exist" 
    return 
} 

Get-ItemProperty C:\fake -ErrorAction Stop 

для того, чтобы не указать ARG -ErrorAction Stop параметра ument явно все время, установите переменную $ErrorActionPreference в начале вашего скрипта/функции:

$ErrorActionPreference = 'Stop' 

или использовать $PSDefaultParameterValues Hashtable, чтобы установить его для конкретных командлетов:

$PSDefaultParameterValues['Get-ItemProperty:ErrorAction'] = 'Stop' 
$PSDefaultParameterValues['Do-OtherStuff:ErrorAction'] = 'Stop' 
$PSDefaultParameterValues['Set-*:ErrorAction'] = 'Stop' 
+0

Спасибо, я действительно не понимал, как мои книги объясняют, как работают ловушки – user2120893

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