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塊,而不會寫入「睡眠時間結束」或者甚至「出現異常...」。
我認爲他的問題的重點是'有時它會跳到finally塊而不寫'sleeptime over ..',甚至是'chaught exception ...'',這意味着他的'Finally'語句被寫入日誌,但不是'try'或'catch',這意味着因爲'try'沒有寫入,所以'catch'應該有,但它沒有。 – SpellingD 2012-08-10 21:36:50
@SpellingD這確實使問題變得更有意義。在提供的示例代碼中,我沒有看到如何跳過'try'塊。我注意到變量'$ reservationDuration'和'$ prepareTime'從未用值初始化,所以看起來我們沒有看完整個腳本。 – 2012-08-11 14:37:55
對不起,我不明白這個問題。那麼我確實省略了一些代碼,使它更具可讀性。在$ sleepTime計算前有一些方法。但我想 - 因爲我的第一個日誌 - 文件寫入方法「tinfo:'在警告VIP睡眠時間之前啓動睡眠:」之前的代碼工作就沒事了。你提到的變量之前只是初始化的。或者可能是因爲$ ErrorActionPreference = Continue屬性而導致仍然寫入日誌文件,並且稍後程序跳轉寫入finally語句中? – andreaspfr 2012-08-13 10:04:00