我使用陷阱将错误写入文件,并希望在错误发生时写入行号。
$_.Exception.StackTrace is not answer.
哪里可以获得行号错误?也许是一些预定义的变量?
答案 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
属性,例如:ScriptName
,ScriptLineNumber
,OffsetInLine
,Line
。
例如,以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。