【发布时间】: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>&1 | OnError { 'Shit happens' }
标签: powershell