【问题标题】:Why does ErrorAction not support lambdas in PowerShell?为什么 ErrorAction 不支持 PowerShell 中的 lambda?
【发布时间】:2017-02-10 10:02:37
【问题描述】:

所以我目前正在对 PowerShell 中的设计概念进行一些研究,并且正在观看 Interview with Jeffrey Snover。在大约 30 分钟时,他谈到了错误操作,并且您可以将停止、继续、静默继续、忽略或查询放入错误操作中。目前支持此功能。示例:

Stop-Process 0 -ErrorAction Stop

不过,他还谈到了将 lambda(脚本块)作为错误操作的可能性。示例:

Stop-Process 0 -Erroraction { <# Some code that gets executed in case of an error #> }

截至今天,这(据我所知)尚不支持。是否有一个原因?我似乎找不到任何其他消息来源来讨论 lambdas 作为错误操作的可能性。

【问题讨论】:

  • 你能举一个你认为 PowerShell 中的 lambda 的例子吗?
  • 我猜想在 PowerShell 中调用它的正确方法是脚本块。所以例如像 $foo = { Write-Host "Hello" }
  • 哦,所以您想为脚本块设置错误操作首选项?
  • 否,例如,如果我调用 Stop-Process cmdlet,我可以指定一个错误操作:Stop-Process 0 -ErrorAction Stop。为什么我不能做类似 Stop-Process 0 -ErrorAction { Some code here }
  • New-Module { filter OnError { param([ScriptBlock]$lambda) if(($_ -is [System.Management.Automation.ErrorRecord]) -and ($null -ne ($Property = $_.PSObject.Properties['WriteErrorStream'])) -and ($Property.Value -is [bool]) -and ($Property.Value)) { .$lambda } else { ,$_ } } } | Out-Null; Stop-Process 0 2&gt;&amp;1 | OnError { 'Shit happens' }

标签: powershell


【解决方案1】:

您不能传递scriptblock,但可以使用一个。你只需要说来评估它。如果你不这样做,由于错误操作是一个字符串,它会得到ToString()scriptblock

Write-Error 'test error' -ErrorAction (&{'Stop','Continue'|Get-Random})

【讨论】:

    猜你喜欢
    • 2013-08-11
    • 2012-11-11
    • 2022-01-26
    • 1970-01-01
    • 2013-01-28
    • 2021-12-12
    • 2011-03-17
    • 2018-07-21
    • 2013-01-04
    相关资源
    最近更新 更多