2011-05-10 20 views
6

Cómo emular -ErrorAction en la función custom powershell. Por ejemplo, consideremos el siguiente scriptEmulación -ErrorAction en la función custom 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 detener

¿Es posible la ejecución de parada foo1 cuando se produce error en Foo2, en lugar de proceder a la ejecución de foo3 pesar de los errores en Foo2?

Saludos, Jeez

Respuesta

7

get-help about_Functions_CmdletBindingAttribute

que desee:

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

No se trata de emulación , que significa realmente la aplicación de parámetros comunes en su función; si esta era tu intención


Después de eso, se puede trabajar de esta manera:

 
Foo1 -ErrorAction stop 

Usted puede utilizar la misma sintaxis para Foo2 y Foo3.


Para registrar el error, utilice la redirección como de costumbre.

+0

quiero dejar en claro, al igual que cómo cmdlet norma se detendrá o continuar cuando el error se produce basándose en el valor de ErrorAction , Quiero que incluso Foo1 se comporte exactamente así también me gustaría registrar el error. Cómo puedo hacer eso ? – JeeZ

+0

Si usa 'cmdletbinding' puede hacer exactamente eso gratis! Ver mi edición –

+0

Nota pequeña, las llamadas 'Write-Error' o los errores de comandos anidados usarán eso,' Write-Host' no lo hará. :) – JasonMArcher

0
function Foo2 
{ 
Write-Host "in Foo2" 
Try {something} 
    Catch { 
      Write-host "Foo2 blew up!" 
      return 
      } 
Foo3 
} 
5

Este es un ejemplo para ilustrar @Empo respuesta

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" 

da

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

NB: También vale la pena señalar que para que 'ErrorAction' se comporte como es de esperar, deberías generar errores con' Write-Error'. Si 'throw' hace una excepción,' ErrorAction'/'ErrorActionPreference' no tiene ninguna influencia; la excepción es un 'Stop' (error de terminación) por definición. https://stackoverflow.com/a/9295344/361842 – JohnLBevan