2012-08-10 38 views
0

我的PowerShell代碼有問題。有時 - 無論出於何種原因 - 我的腳本直接跳到finally塊,而沒有捕獲塊的任何錯誤消息。這是我的PowerShell代碼:Powershell最後毫無例外地跳進消息

try 
{ 
    $sleepTime = $reservationDuration - $prepareTime 
    (get-date -format hh:mm:ss)+"`tinfo:`tstart sleep before warning VIP sleep-time:"+$sleepTime | out-file $logFilePath -append 
    start-sleep -s $sleepTime 
    (get-date -format hh:mm:ss)+"`tinfo:`tsleeptime over" | out-file $logFilePath -append 
} 
catch 
{ 
    (get-date -format hh:mm:ss)+"`terror:`tchaught exception: "+$error[0] | out-file $logFilePath -append 
} 


finally{ 
    (get-date -format hh:mm:ss)+"`tinfo:`tFinally" | out-file $logFilePath -append 
} 

正如您所看到的,我正在編寫一些日誌文件以查看發生了什麼。我總是在我的$ sleepTime變量中獲得正確的int值。然而,有時它會跳躍到finally塊,而不會寫入「睡眠時間結束」或者甚至「出現異常...」。

回答

0

catch塊將執行的唯一時間是try塊中存在異常。你在try塊中唯一有可能產生異常的地方是寫入日誌文件。

所以catch塊只會在有一個異常阻止輸出寫入日誌文件時執行。

讓我知道我是否缺少任何東西。

+0

我認爲他的問題的重點是'有時它會跳到finally塊而不寫'sleeptime over ..',甚至是'chaught exception ...'',這意味着他的'Finally'語句被寫入日誌,但不是'try'或'catch',這意味着因爲'try'沒有寫入,所以'catch'應該有,但它沒有。 – SpellingD 2012-08-10 21:36:50

+0

@SpellingD這確實使問題變得更有意義。在提供的示例代碼中,我沒有看到如何跳過'try'塊。我注意到變量'$ reservationDuration'和'$ prepareTime'從未用值初始化,所以看起來我們沒有看完整個腳本。 – 2012-08-11 14:37:55

+0

對不起,我不明白這個問題。那麼我確實省略了一些代碼,使它更具可讀性。在$ sleepTime計算前有一些方法。但我想 - 因爲我的第一個日誌 - 文件寫入方法「tinfo:'在警告VIP睡眠時間之前啓動睡眠:」之前的代碼工作就沒事了。你提到的變量之前只是初始化的。或者可能是因爲$ ErrorActionPreference = Continue屬性而導致仍然寫入日誌文件,並且稍後程序跳轉寫入finally語句中? – andreaspfr 2012-08-13 10:04:00

相關問題