我使用陷阱将错误写入文件,并希望在错误发生时写入行号.
$_.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)
您应该使用$_.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异常描述转换为字符串?
| 归档时间: |
|
| 查看次数: |
11833 次 |
| 最近记录: |