首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Powershell -错误处理(如果Catch块已被调用,则不要调用最终阻塞)

Powershell -错误处理(如果Catch块已被调用,则不要调用最终阻塞)
EN

Stack Overflow用户
提问于 2016-03-05 04:22:07
回答 2查看 1.5K关注 0票数 2

在Powershell中,它似乎总是执行最终块。如果Catch块已经执行,是否有方法告诉Powershell在“最后块”中不执行语句。例如,下面的代码,如果电子邮件已经触发,那么我不希望powershell生成日志文件。

代码语言:javascript
复制
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
}
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-03-05 04:56:47

我不赞成使用这个代码,但为了回答您的问题,是的,可以这样做。

代码语言:javascript
复制
$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的操作,您可以在任何地方使用条件语句。

这就产生了:

代码语言:javascript
复制
About to do something dumb.
Caught something dumb.
Skipping finally...
票数 2
EN

Stack Overflow用户

发布于 2016-03-05 04:57:38

Finally子句的目的是始终执行,无论是否发生异常。

因此,正如Jason Boyd在关于这个问题的评论中指出的那样,通常情况下,如果在try语句之后没有出现异常,则通常只执行希望执行的代码。

break在您的Catch处理程序中确保只有在没有出现异常的情况下才能访问try语句下面的任何代码--但请注意,即使跨越函数和脚本边界(!),break也会从任何封闭循环中分离出来;只有在没有封闭循环的情况下,break才等同于退出封闭脚本。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35809960

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档