2009-06-19 60 views
7

PowerShell是一個奇怪的.bat和.NET混合。在.bat中,你檢查命令的errorlevel和stderr輸出。在.NET中,你捕捉異常。在PowerShell中進行錯誤處理的正確方法是什麼?

cmdlet如何返回錯誤?當他們失敗或者他們設置了$時,他們是否會拋出異常?代替?這是可配置的嗎?

我還假設我在PowerShell中調用的.NET函數將始終引發異常,並且不會被shell自動捕獲並轉換爲錯誤。那是對的嗎?

也許我真的應該問的是:什麼是一個很好的文章,所有這一切呢?看起來像很多像我這樣的工程師,他們在cmd的.bat和.NET方面都有經驗,他們都很想知道我們應該如何在這個勇敢的新時代中做些事情。

回答

9

對於個人的cmdlet,有一個叫-ErrorAction參數。可能的值是SilentlyContinue,Stop,Continue或Enquire。您也可以指定一個名爲$ errorpreference的全局變量來指定這些選項中的任何一個。

在V1中,您可以使用陷阱關鍵字。有一個pretty good, concise article描述了在V2中添加的陷阱和try/catch/finally語法之間的主要區別。

下面是使用陷阱語句的一個簡單的例子,第一個是一個特異性異常類型,第二個是一個通用的包羅萬象的錯誤陷阱所以,或許是在V2CTP3取出

trap {"Other terminating error trapped" } 
trap [System.Management.Automation.CommandNotFoundException] 
     {"Command error trapped"} 
1/$null 
+0

正是我需要的,非常感謝! – scobi 2009-06-20 04:21:33

0

我認爲Posh是所有.Net。大多數在.Net中工作的概念應該在Posh中工作。

對於錯誤處理,您可以使用Try..catch。也可以「陷阱」錯誤並指定您自己的一組指令以在錯誤條件下執行。

我會極力推薦的內置幫助:

Get-Help about_Errors 
Get-Help about_Trap 
+0

但沒有about_errors或about_trap。而你的迴應總結了我的問題來自哪裏。Posh是.NET-y,我知道try-catch等,但它並不真正幫助我解答任何問題。 – scobi 2009-06-19 20:45:02

相關問題