在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
}
答案 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> <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
等同于退出封闭脚本。