Как получить номер строки с ошибкой внутри ловушки в powershell?

Я использую trap для записи ошибок в файл и хочу записать номер строки, где произошла ошибка.

$_.Exception.StackTrace is not answer.

Где я могу получить номер строки ошибки? Может быть, какая-то предопределенная переменная?

9
задан manlio 21 April 2014 в 08:23
поделиться

2 ответа

Вы можете получить номер строки из объекта InvocationInfo в $ _ . Например, сценарий ...

"Hello, World!"

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

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

foo

... генерирует вывод:

Hello, World!
10
34
13
ответ дан 4 December 2019 в 10:30
поделиться

Следует использовать свойства $_.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 в строку?

8
ответ дан 4 December 2019 в 10:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: