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

piz*_*izi 9 powershell

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

$_.Exception.StackTrace is not answer.
Run Code Online (Sandbox Code Playgroud)

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

kbr*_*ton 13

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

"Hello, World!"

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

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

foo
Run Code Online (Sandbox Code Playgroud)

...生成输出:

Hello, World!
10
34
Run Code Online (Sandbox Code Playgroud)


Rom*_*min 8

您应该使用$_.InvocationInfo的特性,例如:ScriptName,ScriptLineNumber,OffsetInLine,Line.

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

trap {
    Write-Host "$($_.InvocationInfo.ScriptName)($($_.InvocationInfo.ScriptLineNumber)): $($_.InvocationInfo.Line)"
}
Run Code Online (Sandbox Code Playgroud)

它会写如下:

C:\TEMP\test2.ps1(8): Get-Item missing
Run Code Online (Sandbox Code Playgroud)

另外,您可以使用$_.InvocationInfo.PositionMessage,请参阅此帖子: 如何将powershell异常描述转换为字符串?