我有一个非常大的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来显示行号的完整错误的方法?
答案 0 :(得分:3)
您可以使用Select-Object
格式化错误,然后使用ConvertTo-Html -Fragment
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
}