powershell - 捕获 Exchange 命令行管理程序中的错误

标签 powershell exchange-server

我正在尝试编写一个创建 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/

相关文章:

powershell - 在 Powershell 中处理字符串参数的 bool 值

powershell - 在Powershell中重命名文件

powershell - Document.IHTMLDocument3_getElementsByTagName无法正常工作

exchange-server - 如何使用 EWS 确定包含给定项目或文件夹的邮箱?

PowerShell:ForEach-Object with InputObject 有什么意义?

powershell - 导出安全组中所有用户的电子邮件地址

java - JavaMail 线程安全中的 IMAPStore 和 IMAPFolder 吗?

powershell - 使用PoSH取值,奇怪的结果

java - 从 MS Exchange 检索附件的最佳方式

security - 通过 Office 365 的 powershell 查看用户密码是什么