Эмуляция -ErrorAction в пользовательской функции powershell - PullRequest
8 голосов
/ 10 мая 2011

Как эмулировать -ErrorAction в пользовательской функции powershell. Например, рассмотрим следующий скрипт

function Foo2
{
  Write-Host "in Foo2"
  #...Error occurs 
  Foo3
}

function Foo1
{
   Write-Host "in Foo1"
   Foo2
}

function Foo3
{
   Write-Host "in Foo3"
}

PS> Foo1 -ErrorAction stop

Можно ли остановить выполнение Foo1 при возникновении ошибки в Foo2 вместо продолжения выполнения Foo3?

С уважением, Jeez

Ответы [ 3 ]

10 голосов
/ 10 мая 2011

get-help about_Functions_CmdletBindingAttribute

Вы хотите:

function Foo1() {
 [CmdletBinding()]
 PARAM()
 process{
   Write-Host "in Foo1"
   Foo2
 }
}

Речь идет не о эмуляции , это означает, что вы действительно реализуете общие параметры в вашей функции; если это было ваше намерение.


После этого вы можете работать так:

Foo1 -ErrorAction stop

Вы можете использовать один и тот же синтаксис для Foo2 и Foo3.


Для регистрации ошибки используйте перенаправление как обычно.

7 голосов
/ 10 мая 2011

Вот пример для иллюстрации @Empo Ответ

function Test-ErrorAction
{
  [CmdletBinding()]
  Param( )

  begin 
  {
    Write-Host "I'am Here"    
   }

  Process 
  {
    Write-Error "coucou"
  }
  end 
  {
    Write-Host "Done !"
  }
}

clear
Test-ErrorAction -ErrorAction "silentlycontinue"
Test-ErrorAction -ErrorAction "stop"

дает

I'am Here
Done !
I'am Here
coucou
 à C:\Développements\Pgdvlp_Powershell\Sources partagées\Menus Contextuel Explorer\Test-ErrorAction.ps1: ligne:23 caractère:17
+ Test-ErrorAction  <<<< -ErrorAction "stop"
0 голосов
/ 10 мая 2011
function Foo2
{
 Write-Host "in Foo2"
 Try {something} 
   Catch {
             Write-host "Foo2 blew up!"
             return
             }
 Foo3
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...