我有与执行各种操作很多(20+)功能的一个相当大的PowerShell脚本。PowerShell中的try/catch和重试
现在所有的代码并没有真正的错误处理或重试功能。如果一个特定的任务/功能失败,它只会失败并继续。
我想改进错误处理并实施重试以使其更加健壮。
我想类似这样的东西:
$tries = 0
while ($tries -lt 5) {
try{
# Do Something
# No retries necessary
$tries = 5;
} catch {
# Report the error
# Other error handling
}
}
的问题是,我有很多很多的步骤,我需要做到这一点。
我不认为这是有意义的实施上述代码20次。这似乎是多余的。
我在想用一个包含我想调用的函数的参数编写一个“TryCatch”函数?
虽然我不确定这是正确的方法。我最终不会得到一个类似如下的脚本:
TryCatch "Function1 Parameter1 Parameter2"
TryCatch "Function2 Parameter1 Parameter2"
TryCatch "Function3 Parameter1 Parameter2"
有没有更好的方法来做到这一点?
经过测试,看起来好像有$ ScriptBlock.Invoke(),如果有一个错误没有被捕获。使用写主机语句,我确认了正在调用retry-command,使其进入do循环,使其进入try循环,但我故意将数据输入到我的scriptblock中,这会导致错误,但没有发现错误 – Brad
我的脚本块如下所示:Invoke-Sqlcmd -Query“DELETE FROM This_Table_Does_NOT_Exist”-ServerInstance mydbserver -Database TestDB。如果我从脚本外部运行该命令,则会发生错误:Invoke-Sqlcmd:无效的对象名称'This_Table_Does_NOT_Exist'。 – Brad
该错误似乎是[非终止错误](https://blogs.technet.microsoft.com/heyscriptingguy/2015/09/16/understanding-non-terminating-errors-in-powershell/)。尝试在'Invoke-Sqlcmd'语句中添加'-ErrorAction Stop'。 –