0

尝试创建一种更好的方法来处理某些自动化内容的错误。

我的理解是,当在 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}

任何人都可以解释为什么或有一个解决方案可以让循环继续,同时仍然捕获(而不是尝试/捕获)错误?

4

1 回答 1

0

根据评论,我按照我的方式处理这是使用 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; 
}
于 2020-08-07T09:37:01.713 回答