2016-08-04 85 views
1

我有一些PowerShell腳本,其中包含一些初始化步驟,最後我添加了一條trap{}語句,打算從該點捕獲所有未處理的錯誤起始在我的PowerShell腳本中放置陷阱{}的位置是否重要

意外地我意識到,當我在我的初始化邏輯中瘋狂時,即使在定義trap{}之前發生了錯誤,也會調用trap{}

一個簡單的例子:

Write-Host "Hello" 
Write-Out "World" # Incorrect cmdlet name causes an error 

trap{ 
    Write-Warning "Ouch" 
    return $null 
} 

給出:

Hello 
WARNING: Ouch 

顯然,它似乎並不重要的是,trap{}是代碼的馬車行後確定,但有人可以解釋爲什麼這工作呢?

+1

陷阱是一個過時的PowerShell功能。你最好使用try catch。 – megamorf

回答

1

about_Trap

腳本或命令可以有多個陷阱語句。陷阱語句 可以出現在腳本或命令的任何地方。

如果您想更多地控制您想要捕捉異常的代碼,可以考慮使用try/catch/finally

+0

謝謝。我使用'try {} catch {}',但是使用'$ ErrorActionPreference =「Stop」'並且有一個'trap {}'作爲安全網絡,這有助於發現意想不到的問題。 –

+0

現在我想知道如果我在同一範圍內放置多個'trap {}'會發生什麼...... –

+0

@CharlieJoynt也包含在鏈接中,它使用最具體的一個(您可以捕獲像您這樣的特定異常可以用'catch')。 – briantist