2011-12-21 39 views
1

我在嘗試編寫創建Exchange郵箱的powershell腳本。只要郵箱不存在,此工作正常,但當我嘗試捕獲任何錯誤並將其報告回來時,腳本就像每個單詞都很好一樣運行。在Exchange命令行管理程序中捕獲錯誤

我在一個已經存在的用戶上運行腳本,它顯示錯誤,但它正常返回,就好像郵箱已經創建一樣。

我發現this question,它解決了「爲什麼」,我猜Enable-Mailbox命令只會拋出非終止錯誤。

無論如何,所有建議的解決方案來捕捉這些錯誤失敗。該cmdlet似乎忽略$ ErrorActionPreference變量$?總是$ true,無論是否發生錯誤。 $錯誤總是包含一些東西,所以在這裏以及沒有檢查。

這是我使用的腳本代碼,非常基本。

param([string]$uid, [string]$email) 
trap [Exception] { 
    "ERROR: " + $_.Exception.Message 
    exit 
} 
Enable-Mailbox -Identity $uid -Database HaiTest-MBDataBase-01 -PrimarySmtpAddress $email 
"SUCCESS: mailbox created successfully" 

它與其他一切工作,它只是在Exchange管理外殼造成麻煩。 Exchange環境是Exchange 2010服務器。

有沒有什麼辦法檢查cmdlet的錯誤?

回答

3

陷印錯誤只適用於終止錯誤,看起來像從Enable-Mailbox得到的錯誤不是終止錯誤。通過傳遞ErrorAction變量的值'Stop',可以強制錯誤成爲終止錯誤。您也可以使用try/catch(在PowerShell 2.0中)代替陷阱:

param([string]$uid, [string]$email) 
trap { 
    "ERROR: " + $_.Exception.Message 
    exit 
} 
Enable-Mailbox -Identity $uid -Database HaiTest-MBDataBase-01 -ErrorAction Stop -PrimarySmtpAddress $email 
"SUCCESS: mailbox created successfully" 
+0

哇,將ErrorAction直接傳遞給實際工作的cmdlet。這有助於很多,謝謝。 – 2011-12-21 13:06:44

相關問題