Reputation: 113
I use trap to write errors to file, and want write line number where error ocured.
$_.Exception.StackTrace is not answer.
Where I can get line number of error? Maybe some predefined variable?
Upvotes: 11
Views: 13056
Reputation: 468
If you just want to find an error line after the script has been executed, you can view $Error
array. $Error[0]
corresponds to the last error.
More details here.
Upvotes: -1
Reputation: 42063
You should use $_.InvocationInfo
properties, for example: ScriptName
, ScriptLineNumber
, OffsetInLine
, Line
.
For example to format position info in Visual Studio style:
trap {
Write-Host "$($_.InvocationInfo.ScriptName)($($_.InvocationInfo.ScriptLineNumber)): $($_.InvocationInfo.Line)"
}
It will write something like:
C:\TEMP\test2.ps1(8): Get-Item missing
Also, you can just use $_.InvocationInfo.PositionMessage
, see this post:
How can I get powershell exception descriptions into a string?
Upvotes: 8
Reputation: 25692
You can retrieve the line number from the InvocationInfo
object on $_
. For example, the script...
"Hello, World!"
function foo() {
trap [Exception] {
$_.InvocationInfo.ScriptLineNumber
$_.InvocationInfo.OffsetInLine
continue;
}
[reflection.assembly]::loadfrom("C:\")
}
foo
... generates the output:
Hello, World!
10
34
Upvotes: 14