Как получить номер строки ошибки в Powershell
Я пытаюсь получить номер строки ошибки при запуске скрипта Powershell. Вот что я использую в данный момент:
$e = $_.Exception
$line = $_.Exception.InvocationInfo.ScriptLineNumber
$msg = $e.Message
Write-Host -ForegroundColor Red "caught exception: $e at $line"
Иногда это работает, а иногда нет. Мне интересно, если я делаю что-то не так, или что я могу сделать, чтобы сделать эту работу более последовательно.
2 ответа
Я понял, в чем проблема:
Вместо:
$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"
Вот еще один полезный способ получить подробное исключение
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
}