我正在尝试编写一个创建 Exchange 邮箱的 powershell 脚本。只要邮箱尚不存在,这种方法就可以正常工作,但是当我 try catch 任何错误并将其报告回来时,脚本就会运行,就好像一切都很好一样。
我在现有用户上运行该脚本,它显示了错误,但它正常返回,就像创建了邮箱一样。
我找到了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 是否有错误吗?
最佳答案
捕获错误仅适用于终止错误,看起来从 Enable-Mailbox
获得的错误不是终止错误。您可以通过向 ErrorAction 变量传递“Stop”值来强制错误成为终止错误。您还可以使用 try/catch(在 PowerShell 2.0 中)代替 trap:
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"
关于powershell - 捕获 Exchange 命令行管理程序中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8589063/