Powershell:陷阱继续打破整个循环
Posted
技术标签:
【中文标题】Powershell:陷阱继续打破整个循环【英文标题】:Powershell: Trap continue breaks entire loop 【发布时间】:2020-08-07 09:16:41 【问题描述】:尝试创建一种更好的方法来处理某些自动化内容的错误。
我的理解是,当在 Trap 中使用“继续”时,它应该保持循环,但跳过当前迭代的其余部分。但是,在下面的代码中,一切都按我的预期处理,除了在循环中,代码完全停止,无论我尝试什么,我都无法让它继续循环。
trap
Clear-Host
Write-Host "Running script: '$PSCommandPath' as user: '$(whoami)' with process id (PID): '$PID'`n"
Write-Host "Exception error: " $_
Write-Host "`nVariables at run time:"
Get-Variable *
continue;
try
throw "TryCatchError"
catch Write-Host "test 2 caught" $_
throw "TrapError"
#this loop doesnt work
While ($true) Throw "error"; Start-sleep 1
谁能解释为什么或有一个解决方案可以让循环继续,同时仍然捕获(而不是尝试/捕获)错误?
【问题讨论】:
"未标记的 continue 语句立即将程序流返回到由 for、foreach、do 或 while 语句控制的最内层循环的顶部。循环的当前迭代终止,并且循环继续下一次迭代。”所以在你的陷阱中继续不会帮助你继续你的循环。 trap 用于处理“未处理”错误,而 continue 用于优雅地处理事情。我看不出有任何方法可以将这两者结合起来使其工作而无需尝试,抓住 【参考方案1】:根据评论,我采取的方法是使用 try-catch 语句来处理,因为这是正确的方法。这将优雅地继续您的 while 语句并忽略 Start-sleep 1;行。
While ($true)
try
Throw "error";
catch
Clear-Host
Write-Host "Running script: '$PSCommandPath' as user: '$(whoami)' with process id (PID): '$PID'`n"
Write-Host "Exception error: " $_
Write-Host "`nVariables at run time:"
Get-Variable *
continue;
Start-sleep 1;
【讨论】:
以上是关于Powershell:陷阱继续打破整个循环的主要内容,如果未能解决你的问题,请参考以下文章