创建具有不同输出的表

时间:2019-06-20 09:36:23

标签: powershell exception pscustomobject

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

1 个答案:

答案 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)中,因此,上面的代码生成的错误列表可能没有您期望的有用。