2011-03-17 49 views
0

我非常喜歡在Powershell腳本中使用try..catch語句(特別是在調用外部程序/ COM對象等時),然後使用自動的$error變量進行錯誤處理。

我的問題是,我發現,當在模塊中封裝這些方法時,$error變量不再起作用。我想這與你在模塊內調用某個函數時實際運行的調用有關,但它無論如何都是令人生氣的。這裏有人知道爲什麼,甚至更好:有解決方案嗎?

我的確有一個解決方法:使用Invoke-Expression-errorVariable參數來進行任何外部呼叫,但這是相當複雜的 - 並不總是萬無一失的。

回答

1

也許在catch塊中使用$ _變量可以嗎?

+0

Works,kind of: 'New-Module MyMod {function div {param([int] $ i)try {10/$ i} catch {Write「'$ _:$ _」;寫$錯誤[0] .exception}}}' 原來$ _是本地化的(我在瑞典語中有一個「錯誤」)。它仍然缺少$錯誤功能。 – 2011-03-25 07:19:56

+0

不,發生了什麼是你正在轉換$ _(一個異常對象)爲一個字符串,所以你只能得到消息。試試'$ _ |得到-member'。 – JasonMArcher 2011-03-30 19:13:44

+0

謝謝,這工作! 'New-Module MyMod {function div {param([int] $ i)try {10/$ i} catch {if($ _ -match「zero by divide」){Write「不能被零除,愚蠢!」 }}}}' – 2011-04-05 08:24:18