2016-03-05 31 views
2

在Powershell中,它好像總是會執行Finally塊。如果Catch塊 已被執行,是否有辦法告訴Powershell在Finally塊中不執行語句。示例我的下面的代碼,如果電子郵件已被觸發,那麼我不希望powershell生成日誌文件。Powershell - 錯誤處理(如果Catch塊已被調用,不要調用finally塊)

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 
} 
+3

這與「終於」的概念是相反的。這聽起來像你的finally塊中應該在你的try塊的最後。 –

回答

2

我不認可使用此代碼,但回答你的問題,是的,有可能做這樣的事情。

$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... 
+0

感謝您的評論。現在我知道如何重寫我的代碼。謝謝 – user664481

+0

@ user664481:我建議專注於「我不認可使用此代碼」部分的答案 - Kory的方法僅適用於_unusual_場景。 – mklement0

2

Finally條款的目的是爲了總是執行,異常 是否發生

因此,Jason Boyd指出了關於這個問題的評論,您通常會放置代碼,你只希望如果的try語句之後發生沒有例外執行。

breakCatch處理器保證下try語句中的任何代碼只達到的情況下,沒有發生例外 - 但注意break簡單地爆發任何封閉循環的 - 甚至跨越功能和腳本邊界(! );僅在沒有封閉循環時纔是break等同於退出封閉腳本。

+1

我同意。也就是說,可以有一個合理的理由在finally中添加一些條件代碼。不知道確切的情況,很難說,但當然,這似乎反對終於......繼續... –

+1

@KoryGill:的確,我們不知道確切的情況,但是,基於方式這個問題是措辭,我懷疑缺乏對基本面的理解。 – mklement0

相關問題