$ LastExitCode不提供结果

时间:2014-01-15 02:03:42

标签: powershell exchange-server exchange-server-2010

我想看看能否在错误代码上获得一些帮助。我的最后一个脚本是为邮箱设置一个SMTP地址,但我只是以下面的代码为例。

Set-Mailbox jsmith -AntispamBypassEnabled $false
    if ($LastExitCode -eq 1)
    {
    echo "Exit Code 1" $lastexitcode
    }
    else
    {
    echo "Exit Code 0" $lastexitcode
    }

我的期望是,我第一次运行命令时,它完成了工作并获得了成功的错误代码。第二次运行命令时,powershell会返回以下内容。

Warning: The command completed successfully but no settings have been modified.

我希望能够获得3种情况的错误代码。 (它有效,它失败了,然后上面的那个它起作用,但没有做出任何改变。)我似乎无法找到任何这方面的例子,并且非常感谢一些建议。

感谢。

迈克尔

好的,我得到了很好的回复,现在我正在使用以下代码。我必须修改数千个对象,它们都将处于不同的错误代码,因此我需要能够将任何条件写入日志文件。我在整个脚本中都有一堆环境变量,所以最后,我要把“用户通过/失败”$ EmailAddress $ DisplayName等.....

Try { Set-Mailbox jsmith -AntispamBypassEnabled $false -ErrorAction Stop -   WarningVariable Warn }

Catch { Exit 2 } Write-Host "Exit Code 2"

if ($Warn) { Exit 1 } Write-Host "Exit Code 1"

else       { Exit 0 } Write-Host "Exit Code 0"

2 个答案:

答案 0 :(得分:8)

<$> $ LastExitCode与Win32应用程序的退出代码有关,而与PowerShell cmdlet无关。你可能最好检查$?无论是对还是对。 $?变量可以报告Win32应用程序和PowerShell cmdlet。以下是Get-Help about_Automatic_Variables:

中的文字

$?

包含上次操作的执行状态。它包含 如果上一次操作成功则为TRUE,如果失败则为FALSE。

你也可以清除$ Error,例如$ Error.Clear()然后检查$ Error [0]的值,看看你的命令运行后是否填充了它。

答案 1 :(得分:3)

试试这个。它应该在成功时退出0,如果成功则退出但没有更改,如果失败则退出:

Try { Set-Mailbox jsmith -AntispamBypassEnabled $false -ErrorAction Stop -WarningVariable Warn }
  Catch { Exit 2 }  
if ($Warn) { Exit 1 }
else       { Exit 0 }