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

时间:2016-03-05 04:22:08

标签: powershell

在Powershell中,它似乎总是会执行Finally块。如果Catch阻塞,有没有办法告诉Powershell不要在Finally块中执行语句 已被执行。示例我的下面的代码,如果电子邮件已被触发,那么我不想要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
}

2 个答案:

答案 0 :(得分:2)

我不认可使用此代码,但回答您的问题,是的,可能会做这样的事情。

while($r=mysql_fetch_array($qry))
{ 

    <input name='eid' disabled='disabled' value='".<?php echo $_GET['eid']; ?>."'>
    echo "<tr><td>
    <input name='eid' disabled='disabled' value='".<?php echo $_GET['eid']; ?>."'>
    </td><td>".$r['bname']."</td><td>".$r['aname']."</td><td>".$r['price']."</td><td>".$r['avalable_book']."</td><td><a class='btn btn-framed btn-color-primary btn-small' href='Bookdetail.php?eid=".$r['bid']."'>Edit</a>&nbsp;<a class='btn btn-framed btn-color-primary btn-small' href='BookDetail.php'>Cancel</a></td></tr>";

}

代码执行您所说的...并且您可以在任何地方使用条件语句。

这会产生:

$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..."
    }
}

答案 1 :(得分:2)

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

因此,正如Jason Boyd在对该问题的评论中指出的那样,如果没有异常发生 之后,您通常会放置您只想执行的代码{ {1}}陈述。

try处理程序中的

break确保仅在没有异常发生时才会到达Catch语句下面的任何代码 - 但请注意{{1}简单地突破任何封闭循环 - 甚至跨越函数和脚本边界(!);只有当没有封闭循环时try等同于退出封闭脚本。