2014-07-10 47 views
0

我正在研究一個跨多臺服務器執行腳本的PowerShell腳本。 將我的腳本轉換爲exe後使用http://ps2exe.codeplex.com/Powershell嘗試趕上ExecuteNonQuery()

當我關閉窗口時,如果在try catch中捕獲到任何錯誤,我會收到一個錯誤。

$ErrorActionPreference = 'Continue' 
    $dataAdapter = new-object System.Data.SqlClient.SqlCommand ($ExeStatement, $connString); 
    $dataAdapter.Connection.Open(); 
    $dataAdapter.CommandTimeout = 65535; 
    Try { 
     $dataAdapter.ExecuteNonQuery()} 
    catch{ 
     $ErrorCounter = $ErrorCounter + 1 
     $dataAdapter.Connection.Close();} 
    finally{ 
     $dataAdapter.Connection.Close();} 

如果我刪除try catch,我可以在發現錯誤時關閉窗口。 如果我刪除$ dataAdapter.CommandTimeout = 65535;我能夠在發現錯誤時關閉窗口,但由於其中一個腳本很長,所以我需要它。 如果我將ErrorActionPreference設置爲STOP,它也可以正常工作。儘管我希望能夠在最後繼續完成錯誤並進行報告。

我在關閉窗口時從窗口收到以下錯誤。

說明:停止工作

問題簽名:
問題事件名稱:CLR20r3
問題簽名01:PROGRAMNAME.exe
問題簽名02:0.0.0.0
問題簽名03:53bdc0d9
問題簽名04:mscorlib
問題簽名05:2.0.0.0
問題簽名06:5174de33
問題簽名07:34A9
問題簽名08:18C
問題簽名09信息:System.IO.IOException
OS版本:6.1.7601.2.1.0.16.7
區域設置ID:1033
DefaultDataCollection失敗:0x8007001f

我需要腳本能夠繼續通過錯誤,但我也需要趕上錯誤。

回答

0

當你刪除'finally'塊並關閉連接時會發生什麼?

 try { 
      $dataAdapter.ExecuteNonQuery() 
     } 
     catch { 
      $ErrorCounter = $ErrorCounter + 1 
     } 
     $dataAdapter.Connection.Close() 

 try { 
      $dataAdapter.ExecuteNonQuery() 
      $dataAdapter.Connection.Close() 
     } 
     catch { 
      $ErrorCounter = $ErrorCounter + 1 
     } 

貴EXEC返回任何東西,當它完成,沒有錯誤?也許修改它返回0或什麼時候完成運行。我的猜測是適配器正在等待返回的東西(即使它不是查詢),因此如果沒有錯誤,您永遠不會到達finally塊並關閉連接。

+0

只有當錯誤返回時,如果我拋出catch的外部關閉,或者在try內部出現相同的錯誤,它纔會導致問題。 – SecretChief