Как получить номер строки с ошибкой внутри ловушки в powershell? - PullRequest
9 голосов
/ 11 августа 2010

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

$_.Exception.StackTrace is not answer.

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

Ответы [ 3 ]

13 голосов
/ 11 августа 2010

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

"Hello, World!"

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

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

foo

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

Hello, World!
10
34
8 голосов
/ 11 августа 2010

Вы должны использовать $_.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 в строку?

0 голосов
/ 27 марта 2016

Если вы просто хотите найти строку ошибки после выполнения скрипта, вы можете просмотреть массив $Error. $Error[0] соответствует последней ошибке.

Подробнее здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...