Powershell - 错误处理(如果已调用 Catch block ,则不要调用 finally block )

标签 powershell

在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/

相关文章:

Powershell - 在 input-csv 命令期间添加 header

powershell - 将文本框输入限制为仅数字或数字键盘-不得使用特殊字符

powershell - ' =' is not the same as ' =' | Declaration Reference Link - don' 不知道怎么调用这个

powershell - 并行化 Active Directory 查询

powershell - Powershell脚本未从批处理文件触发

JSON 结构无法在转换往返中幸存

shell - 在执行路径中使用变量

.net - System.Net.ServicePointManager 单例的范围是什么

powershell - 电源外壳。将逗号分隔的值转换成单独的对象

powershell - PowerShell自定义输出@ {n =; e =}