我正在尝试编写一个创建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是否有错误?
答案 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));