Powershell脚本给出错误但仍然“成功”返回

时间:2013-06-07 18:53:30

标签: powershell error-handling active-directory exchange-server

我正在编写程序来创建AD帐户并启用Exchange邮箱,并且我从中获得了一些奇怪的行为。

首先,虽然它成功创建了AD用户,但无法启用邮箱,因为" MyPath / Mr。无法找到示例"。我假设这是因为AD服务器和Exchange服务器之间存在时间差(代码在Exchange服务器上运行)。虽然插入一个睡眠时间似乎可以解决这个问题,但还有其他可能性我可能会丢失吗?

其次,我在"红色错误文本"中收到此错误消息。 Powershell使用的。似乎我的try / catch语句让错误滑过,这导致我的脚本错误地通知我任务已成功完成。我怎么能强制在脚本中捕获错误而不是在控制台上显示? (我在测试过程中运行了dot-sourced,这就是我注意到的。)

我已经在下面列出了相关部分。任何帮助表示赞赏!谢谢=)

Import-Module ActiveDirectory
Add-PSSnapin Microsoft.Exchange.Management.Powershell.Admin
$errorLog = @()
$masterLog = @()
$time = Get-Date

New-ADUser -SamAccountName "example" -Name "Mr. Example" -Path "DC=MyPath" -Enabled 1 -Server ADServer

try{
    Enable-Mailbox -Identity "MyPath/Mr. Example" -Alias "example" -Database "DatabaseName"
}
catch{
    $myError = $Error[0]
    $errorLog = $errorLog + "[$time] Error enabling mailbox for $fullName`: $myError"
}

if($errorLog.length -eq 0){
    echo "An Active Directory account and Exchange mailbox for Mr. Example has been successfully created!"
}
else{
    foreach($event in $errorLog){
        $masterLog = $masterLog + $event
    }
}

1 个答案:

答案 0 :(得分:2)

PowerShell中存在终止和非终止错误。只有前者被try..catch抓住。您可以通过设置

强制终止错误
... -ErrorAction Stop

表示特定命令,或

$ErrorActionPreference = Stop

表示整个脚本。请参阅more information脚本专家博客。