使用行号获取完整的$ error输出

时间:2018-04-04 14:58:56

标签: powershell

我有一个非常大的PowerShell脚本,当我在脚本末尾使用$ error时,我收到一个返回的错误,即使Transcript没有显示。所以我不知道“错误”在哪里。这是我的设置:

$error.Clear()

# 600 lines of code

foreach ($err_msg IN $error) {
    $body += "<br><hr>"
    $body += "$err_msg"
}

然后通过电子邮件将其发送给我。我遇到的问题是它在代码中的某个地方返回一个错误,在Start-Transcript中不可见,但我想清理它,所以它不会每晚都向我报告这个错误。如果我只是在控制台中运行$ error,我会得到错误的行号,但是如果我使用上面的代码来记录错误,我就不会得到行号。有没有使用try / catch来显示行号的完整错误的方法?

1 个答案:

答案 0 :(得分:3)

您可以使用Select-Object格式化错误,然后使用ConvertTo-Html -Fragment

将其转换为html表格
if ( $error )
{
    $ErrorTable = $Error | Select-Object -Property @(
        @{Name = 'ScriptLineNumber'; Expression = { $_.InvocationInfo.ScriptLineNumber } }
        @{Name = 'Line'            ; Expression = { $_.InvocationInfo.Line } }
        @{Name = 'Exception'       ; Expression = { $_.Exception } }
    ) | ConvertTo-Html -Fragment

    $Body += "<br><hr>"
    $Body += $ErrorTable
}