模拟-自定义powershell函数中的ErrorAction

模拟-自定义powershell函数中的ErrorAction,powershell,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-错误动作停止 当Foo2中出现错误时,是否可以停止执行Foo1,而不

如何在自定义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-错误动作停止


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

获取有关函数的帮助\u CmdletBindingAttribute

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

function Foo1() { [CmdletBinding()] PARAM() process{ Write-Host "in Foo1" Foo2 } } 函数Foo1(){ [CmdletBinding()] PARAM() 过程{ 写主机“在Foo1中” 食物2 } } 这与仿真无关,它意味着在函数中真正实现公共参数;如果这是你的意图


之后,您可以这样工作:

Foo1 -ErrorAction stop Foo1-错误动作停止 您可以对
Foo2
Foo3
使用相同的语法



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

这里有一个示例来说明@Empo-Answer

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"
给予

我在这里
完成!
我在这里
库库
a C:\Dédevelopments\Pgdvlp_Powershell\Sources partagées\Menus contextel Explorer\Test-ErrorAction.ps1:ligne:23克拉:17

+Test ErrorAction让我说清楚,就像基于ErrorAction的值发生错误时标准cmdlet将如何停止或继续一样,我希望Foo1的行为与此完全相同,我也希望记录错误。我该怎么做呢?如果您使用
cmdletbinding
,您完全可以免费做到这一点!请参阅我的编辑。小说明,
写入错误
调用或嵌套命令中的错误将使用该命令,
写入主机
将不使用该命令。:)注意:同样值得注意的是,要使
ErrorAction
按您预期的方式运行,您应该使用
Write Error
引发错误。如果您
抛出
异常,
ErrorAction
/
ErrorActionPreference
没有影响;根据定义,例外情况是停止(终止错误)。
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"