Как отобразить номера строк, где возникают исключения Powershell - PullRequest
2 голосов
/ 13 июня 2019

Мой скрипт Powershell генерирует исключение, но не дает мне номер строки, в которой генерируется исключение:

The process cannot access the file 'C:/path/to/foo.txt' because it is being used by another process.
+ CategoryInfo          : NotSpecified: (:) [Set-Content], IOException
+ FullyQualifiedErrorId : System.IO.IOException,Microsoft.PowerShell.Commands.SetContentCommand
+ PSComputerName        : localhost

Я думаю, что лучшая практика здесь - это реорганизовать скрипт для использования try / catchблоки сужаются именно там, где выдается исключение Set-Content - но в этом случае, из-за размера / области действия скрипта, я пытаюсь избежать этой опции.

Вместо этого я надеюсь на небольшое нисходящее решение - например, возможность вызывать скрипт с дополнительной детализацией таким образом, чтобы Powershell печатал номера строк в трассировках стека (почти уверен, что Python делает это по умолчанию).

Поддерживает ли это Powershell 3.0 изначально?

EDIT : Принятый ответ на этот вопрос включаетподход try / catch, о котором я упоминал, не является моим предпочтительным подходом.Опять же, есть ли способ заставить PowerShell сообщать номера строк, когда исключения вызываются без обязательной попытки / перехвата?Должен ли я обернуть весь скрипт в общую попытку / поймать?Должен ли я вызвать скрипт с каким-нибудь флагом --verbose?Powershell 3.0 поддерживает что-нибудь подобное?

1 Ответ

1 голос
/ 14 июня 2019

Set-PsDebug будет печатать каждую команду на консоли во время работы скрипта.

Set-PSDebug -Trace 2; foreach ($i in 1..3) {$i}
DEBUG:    1+ Set-PsDebug -Trace 2; foreach ($i in 1..3) {$i}
DEBUG:    1+ Set-PsDebug -Trace 2; foreach ($i in 1..3) {$i}
1
DEBUG:    1+ Set-PsDebug -Trace 2; foreach ($i in 1..3) {$i}
2
DEBUG:    1+ Set-PsDebug -Trace 2; foreach ($i in 1..3) {$i}
3
...