Write-Host "Errors" -BackgroundColor Red
$Error.Clear()
{Some 1200 lines code}
如果上面的代码中有任何错误,我想在代码执行后创建一个包含两列的表:“错误”和“行”。但是我使用PSCustomObject(PSObject)失败。它不创建表。
[PSCustomObject] @{
Error = $_.Exception.Message
Line = $_.InvocationInfo.ScriptLineNumber
}
New-Object PSObject -Property @{
Error = $Error.Exception.Message
Line = $Error.InvocationInfo.ScriptLineNumber
}
由于代码中的行太多,所以我不想使用tey / catch,那么如何合并输出?甚至不使用try / catch也可能吗?。
$Error.Exception.Message
$Error.InvocationInfo.ScriptLineNumber
答案 0 :(得分:1)
要创建一个在给定代码段内发生的所有错误的列表(假设没有错误终止执行),您可以执行以下操作:
$Error.Clear()
# set error action preference so you don't have to add `-EA SilentlyContinue`
# to each statement
$EAPSave = $ErrorActionPreference
$ErrorActionPreference = 'SilentlyContinue'
# ...
# your code goes here
# ...
# restore original error action preference
$ErrorActionPreference = $EAPSave
$Error | ForEach-Object {
[PSCustomObject]@{
'Error' = $_.Exception.Message
'Line' = $_.InvocationInfo.ScriptLineNumber
}
}
但是,请注意,在许多情况下,相关的错误信息都隐藏在嵌套异常($_.Exception.InnerException
)中,因此,上面的代码生成的错误列表可能没有您期望的有用。