我正在调用一个外部 .ps1 文件,其中包含break
某些错误情况下的语句。我想以某种方式捕获这种情况,允许任何外部打印的消息正常显示,并继续执行脚本中的后续语句。如果外部脚本有throw
,这可以很好地使用try
/catch
。即使trap
在我的文件中,我无法阻止脚本终止。
为了回答这个问题,假设外部 .ps1 文件的源代码(由其他人编写并在运行时拉入)无法更改。
我想要的是否可能,或者脚本的作者只是没有考虑在外部调用时表现得很好?
编辑:提供以下示例。
在 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 中的进一步语句。我理解为什么break语句会导致“就是今天”。永远不会被打印,但是我想找到一种解决方法,因为我不是 badscript.ps1 的作者。
编辑:将标题从“powershell try/catch 不捕获中断语句”更新为“如何防止外部脚本使用中断语句终止脚本”。提到 try/catch 实际上更多的是关于实际问题的一个失败的解决方案,新标题更好地反映了这一点。
从我的脚本中运行单独的 PowerShell 进程来调用外部文件最终成为一个足以满足我的需求的解决方案:powershell -File .\badscript.ps1
将执行 badscript.ps1 的内容,直到break
语句包括任何 Write-Host 或 Write-Warning,然后让我自己的脚本继续。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)