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

Я пытаюсь получить номер строки ошибки при запуске скрипта PowerShell. Вот что я использую в данный момент:

$e = $_.Exception
$line = $_.Exception.InvocationInfo.ScriptLineNumber
$msg = $e.Message 

Write-Host -ForegroundColor Red "caught exception: $e at $line"

Иногда это работает, а иногда нет. Мне интересно, если я делаю что-то не так, или что я могу сделать, чтобы сделать эту работу более последовательно.

Ответ 1

Я понял, в чем проблема:

Вместо:

$e = $_.Exception
#this is wrong
$line = $_.Exception.InvocationInfo.ScriptLineNumber
$msg = $e.Message 

Write-Host -ForegroundColor Red "caught exception: $e at $line"

Так должно быть

$e = $_.Exception
$line = $_.InvocationInfo.ScriptLineNumber
$msg = $e.Message 

Write-Host -ForegroundColor Red "caught exception: $e at $line"

Ответ 2

здесь еще один полезный способ захватить подробное исключение

try { throw "fdsfds" } catch { Write-Error ($_.Exception | Format-List -Force | Out-String) -ErrorAction Continue Write-Error ($_.InvocationInfo | Format-List -Force | Out-String) -ErrorAction Continue throw }