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

Jee*_*van 8 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"
}
Run Code Online (Sandbox Code Playgroud)

PS> Foo1 -ErrorAction停止

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

此致,Jeez

Emi*_*ggi 12

get-help about_Functions_CmdletBindingAttribute

你要:

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

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


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

Foo1 -ErrorAction stop

您可以使用相同的语法Foo2Foo3.


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


JPB*_*anc 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"
Run Code Online (Sandbox Code Playgroud)

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"
Run Code Online (Sandbox Code Playgroud)

  • 注意:还值得注意的是,为了让 `ErrorAction` 像你期望的那样运行,你应该用 `Write-Error` 引发错误。如果你`throw`一个异常,`ErrorAction` / `ErrorActionPreference` 没有影响;根据定义,例外是“停止”(终止错误)。/sf/answers/650674111/ (2认同)