在Powershell中,它似乎总是会执行Finally block 。有没有办法告诉Powershell不执行Finally block 中的语句if Catch block 已被处决。例如我下面的代码,如果电子邮件已被触发,那么我不希望 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
}
最佳答案
我不赞成使用此代码,但为了回答你的问题,是的,可以做这样的事情。
$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..."
}
}
代码按照您的指示执行...并且您可以在任何您想要的地方使用条件语句。
这会产生:
About to do something dumb.
Caught something dumb.
Skipping finally...
关于Powershell - 错误处理(如果已调用 Catch block ,则不要调用 finally block ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35809960/