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:陷阱继续打破整个循环的主要内容,如果未能解决你的问题,请参考以下文章

Powershell表单 - 使用按钮暂停循环

打破嵌套循环[重复]

有啥办法可以打破 foreach 循环?

java中在for循环中remove元素时的陷阱

Python3

powershell 打破例外