【问题标题】:Powershell Script Gives Error But Still Returns "Successfully"Powershell 脚本出错但仍返回“成功”
【发布时间】:2013-06-08 04:12:55
【问题描述】:

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

首先,虽然成功创建了AD用户,但无法启用邮箱,因为“找不到MyPath/Mr. Example”。我认为这是因为 AD 服务器和 Exchange 服务器之间存在时间滞后(代码在 Exchange 服务器上运行)。虽然插入睡眠时间似乎可以解决此问题,但是否还有其他可能我可能会丢失?

其次,我在 Powershell 使用的“红色错误文本”中收到此错误消息。似乎我的 try/catch 语句让错误溜走了,这导致我的脚本错误地通知我任务已成功完成。如何强制在脚本中捕获错误而不是显示在控制台上? (我在测试期间以点源方式运行它,这就是我注意到这一点的原因。)

我在下面包含了相关部分。任何帮助表示赞赏!谢谢=)

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
    }
}

【问题讨论】:

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


    【解决方案1】:

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

    ... -ErrorAction Stop
    

    对于特定的命令,或

    $ErrorActionPreference = Stop
    

    对于整个脚本。请参阅 Scripting Guy 博客了解 more information

    【讨论】:

    • 这是有道理的。非常感谢您提供快速而翔实的答案!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-17
    • 1970-01-01
    • 2011-11-24
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    相关资源
    最近更新 更多