在Exchange命令行管理程序中捕获错误

时间:2011-12-21 11:26:39

标签: powershell exchange-server

我正在尝试编写一个创建Exchange邮箱的powershell脚本。只要邮箱不存在就可以正常工作,但是当我尝试捕获任何错误并将其报告回来时,脚本就会一直运行,好像每个标记都没问题。

我在已经存在的用户上运行脚本并显示错误,但它正常返回,就好像邮箱已创建一样。

我找到this question,它解决了“为什么”,我想Enable-Mailbox命令只会抛出非终止错误。

无论如何,捕获这些错误的所有建议解决方案都失败了。 cmdlet似乎忽略了$ ErrorActionPreference变量,$?无论是否发生错误,总是$ true。 $ error总是包含一些东西,所以这里也没有什么可以检查的。

这是我正在使用的脚本代码,非常基本。

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是否有错误?

2 个答案:

答案 0 :(得分: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" 

答案 1 :(得分:0)

到目前为止,我发现Exchange 2010 Cmdlet奇怪的异常处理行为的唯一可靠解决方案是添加&#34; -ErrorAction SilentlyContinue&#34;,以抑制异常,然后查找预期结果。< / p>

例如,在启用邮箱时,我会查找邮箱的存在,就像这样......

MarkerOptions marker = new MarkerOptions();
marker.icon(BitmapDescriptorFactory.fromResource(R.drawable._icon));