Я использую trap для записи ошибок в файл и хочу записать номер строки, где произошла ошибка.
$_.Exception.StackTrace is not answer.
Где я могу получить номер строки ошибки? Может быть, какая-то предопределенная переменная?
Вы можете получить номер строки из объекта InvocationInfo
в $ _
. Например, сценарий ...
"Hello, World!"
function foo() {
trap [Exception] {
$_.InvocationInfo.ScriptLineNumber
$_.InvocationInfo.OffsetInLine
continue;
}
[reflection.assembly]::loadfrom("C:\")
}
foo
... генерирует вывод:
Hello, World!
10
34
Следует использовать свойства $_.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
, смотрите этот пост:
Как получить описание исключения powershell в строку?