在自定义PowerShell函数中模拟-ErrorAction

时间:2011-05-10 13:25:19

标签: powershell

如何在自定义PowerShell函数中模拟-ErrorAction。例如,考虑以下脚本

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

当Foo2发生错误时,是否可以停止执行Foo1,而不是继续执行Foo3?

此致 哎呀

3 个答案:

答案 0 :(得分:10)

get-help about_Functions_CmdletBindingAttribute

你想:

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

这不是关于 emulation ,它意味着在你的函数中真正实现通用参数;如果这是你的意图。


之后,你可以像这样工作:

Foo1 -ErrorAction stop

您可以对Foo2Foo3使用相同的语法。


要像往常一样记录错误使用重定向。

答案 1 :(得分:7)

这是一个说明@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"

答案 2 :(得分:0)

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