Я заметил, что мой скрипт PowerShell начал сообщать о неверных номерах строк в случае сбоя скрипта, что значительно усложняет поиск и устранение неисправностей. Я прибил проблему к следующему примеру сценария:
param(
[Parameter(Mandatory=$True)]$foo
)
$ErrorActionPreference = "Stop"
"Line 5"
Systax Error here
"Line 7"
Без ключевого слова 'Mandatory' или без '$ ErrorActionPreference = "Stop"' номер строки ошибки сообщается правильно:
Systax : The term 'Systax' is not recognized ...
At C:\scripts\1.ps1:6 char:1
Но если вы запустите предоставленный пример сценария, вы получите эту ошибку в консоли PowerShell:
C:\scripts\1.ps1 : The term 'Systax' is not recognized ...
At line:1 char:1
и вообще без номера строки при запуске примера сценария в редакторе PowerShell ISE. В консоли номер ошибки всегда указывается в виде строки: 1. Для больших сценариев незнание того, какая строка содержит ошибку, является реальной проблемой.
Описанное поведение выглядит как ошибка в PowerShell. Кто-нибудь знает обходной путь, который позволяет получить правильные номера строк ошибок при сохранении обязательных параметров и '$ ErrorActionPreference = "Stop"'? Используемая версия PowerShell - 5.1.