在Powershell中,它似乎总是执行最终块。如果Catch块已经执行,是否有方法告诉Powershell在“最后块”中不执行语句。例如,下面的代码,如果电子邮件已经触发,那么我不希望powershell生成日志文件。
Catch
{
$ErrorMessage = $_.Exception.Message
$FailedItem = $_.Exception.ItemName
Send-MailMessage -From xxxxxxxxxx
Break
}
Finally
{
$Time=(Get-Date).ToString('MM/dd/yyyy hh:mm:ss tt')
"This script made a read attempt at" + "$d1" | out-file $logfile -append
}发布于 2016-03-05 04:56:47
我不赞成使用这个代码,但为了回答您的问题,是的,可以这样做。
$badIdea = $true
try
{
Write-Output "About to do something dumb."
$ugh = 1 / 0;
Write-Output "Did I do something dumb?"
}
catch
{
Write-Output "Caught something dumb."
$badIdea = $false
}
finally
{
if ($badIdea -eq $true)
{
Write-Output "Performing finally..."
}
else
{
Write-Output "Skipping finally..."
}
}代码执行您告诉it...and的操作,您可以在任何地方使用条件语句。
这就产生了:
About to do something dumb.
Caught something dumb.
Skipping finally...发布于 2016-03-05 04:57:38
Finally子句的目的是始终执行,无论是否发生异常。
因此,正如Jason Boyd在关于这个问题的评论中指出的那样,通常情况下,如果在try语句之后没有出现异常,则通常只执行希望执行的代码。
break在您的Catch处理程序中确保只有在没有出现异常的情况下才能访问try语句下面的任何代码--但请注意,即使跨越函数和脚本边界(!),break也会从任何封闭循环中分离出来;只有在没有封闭循环的情况下,break才等同于退出封闭脚本。
https://stackoverflow.com/questions/35809960
复制相似问题