Я вызываю внешний файл .ps1, содержащий инструкцию break
в определенных условиях ошибки. Я хотел бы как-то поймать этот сценарий, разрешить любые сообщения, напечатанные извне, как обычно, и продолжить с последующими утверждениями в моем script. Если внешний script имеет throw
, это работает отлично, используя try
/catch
. Даже с trap
в моем файле я не могу остановить завершение script.
Чтобы ответить на этот вопрос, предположим, что исходный код внешнего файла .ps1 (созданный кем-то другим и втянутый во время выполнения) не может быть изменен.
Является ли то, что я хочу, или автор script просто не думал о том, чтобы играть красиво, когда вызывается извне?
Изменить: укажите следующий пример.
В файле badscript.ps1:
if((Get-Date).DayOfWeek -ne "Yesterday"){
Write-Warning "Sorry, you can only run this script yesterday."
break
}
В myscript.ps1:
.\badscript.ps1
Write-Host "It is today."
Результаты, которые я хотел бы получить, - это увидеть предупреждение от badscript.ps1 и продолжить его с дальнейшими операциями в myscript.ps1. Я понимаю, почему выражение о разрыве причины "Это сегодня". чтобы никогда не печататься, однако я хотел найти способ обойти его, поскольку я не являюсь автором badscript.ps1.
Изменить: Обновление заголовка из "powershell try/catch не ломает оператор break" на "как предотвратить внешний script от завершения вашего script с помощью оператора break". Упоминание try/catch было действительно больше об одном неудавшемся решении фактического вопроса, который лучше отражает новый заголовок.