我通常在PowerShell脚本中设置ErrorActionPreference = "Stop"
并使用Trap
和/或Try...Catch
来检测非终止错误,但由于某种原因,此错误似乎无法捕获
下面脚本中的[datetime]'13/12/2016'
表达式会导致“无效参数运行时异常”,但try...catch
不会被触发,尽管$ErrorActionPreference = "Stop"
。
$Error.Clear()
$ErrorActionPreference = "Stop"
$a = @( "name", @{name='test';expression={([datetime]'13/12/2016')}} )
try {
Get-ChildItem -Path c:\ | Select-Object -Property $a
} catch {
Write-Host "Caught error: $($_)"
}
write-host "There were $($Error.Count) error(s)"
write-host "Most recent error: $($Error[0] | out-string)"
要说清楚,我对修复日期时间转换不感兴趣,我知道如何做到这一点,但我想了解为什么我无法发现错误。
我在PowerShell 2.0和3.0环境中试过这个。
更新:如果我在[datetime]'13/12/2016'
块中添加了一行Try
,则此操作会触发Catch
。
更新:将-ErrorAction Stop
添加到Get-ChildItem
和/或Select-Object
cmdlet没有任何区别。