如何在powershell中获取陷阱内的错误行号?

时间:2010-08-11 11:07:02

标签: powershell

我使用陷阱将错误写入文件,并希望在错误发生时写入行号。

$_.Exception.StackTrace is not answer.

哪里可以获得行号错误?也许是一些预定义的变量?

3 个答案:

答案 0 :(得分:14)

您可以从InvocationInfo上的$_对象中检索行号。例如,脚本......

"Hello, World!"

function foo() {
  trap [Exception] {
    $_.InvocationInfo.ScriptLineNumber
    $_.InvocationInfo.OffsetInLine
    continue;
  }

  [reflection.assembly]::loadfrom("C:\")
}

foo

...生成输出:

Hello, World!
10
34

答案 1 :(得分:9)

您应该使用$_.InvocationInfo属性,例如:ScriptNameScriptLineNumberOffsetInLineLine

例如,以Visual Studio样式格式化位置信息:

trap {
    Write-Host "$($_.InvocationInfo.ScriptName)($($_.InvocationInfo.ScriptLineNumber)): $($_.InvocationInfo.Line)"
}

它会写出类似的内容:

C:\TEMP\test2.ps1(8): Get-Item missing

此外,您可以使用$_.InvocationInfo.PositionMessage,请参阅此帖子: How can I get powershell exception descriptions into a string?

答案 2 :(得分:0)

如果您只想在脚本执行后找到错误行,则可以查看$Error数组。 $Error[0]对应于上一个错误。

更多详情here