2013-06-21 3 views
10

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

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

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

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

+0

ли заявления об уловах стараются не давать вам информацию, нужно? Это в уловке? –

+0

Ошибка try/catch не дает ошибку. Он не перечисляет номер строки и прочее. – BlackHatSamurai

+0

Я догадался (хотя никаких исключений, чтобы поймать сейчас), что-то вроде: catch {[Exception] $ _. ScriptLineNumber} может это сделать ... Но я также просто ломаю свои ошибки и повторяю исключение, и это обычно дает мне то, что мне нужно , Поэтому я рад, что вы это нашли. –

ответ

16

я понял, что этот вопрос был:

Вместо:

  $e = $_.Exception 
      $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"