使用不同的输出创建 table
Create table with different output
Write-Host "Errors" -BackgroundColor Red
$Error.Clear()
{Some 1200 lines code}
如果上面的代码有任何错误,我想在执行代码后创建一个包含两列的 table:"Error" 和 "Line"。但是我使用 PSCustomObject (PSObject) 失败了。它不会创建 table。
[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
要创建给定代码段期间发生的所有错误的列表(前提是没有错误终止执行),您可以这样做:
$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
),因此上面代码生成的错误列表可能没有您预期的那么有用。
Write-Host "Errors" -BackgroundColor Red
$Error.Clear()
{Some 1200 lines code}
如果上面的代码有任何错误,我想在执行代码后创建一个包含两列的 table:"Error" 和 "Line"。但是我使用 PSCustomObject (PSObject) 失败了。它不会创建 table。
[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
要创建给定代码段期间发生的所有错误的列表(前提是没有错误终止执行),您可以这样做:
$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
),因此上面代码生成的错误列表可能没有您预期的那么有用。