【问题标题】:$LastExitCode Not providing result$LastExitCode 不提供结果
【发布时间】:2014-02-03 08:32:06
【问题描述】:

我想看看我是否可以就错误代码获得一些帮助。我的最终脚本是为邮箱设置一个 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"

【问题讨论】:

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


    【解决方案1】:

    $LastExitCode 与 Win32 应用程序的退出代码有关,而不是 PowerShell cmdlet。你最好检查一下 $?为真或假。美元?变量可以报告 Win32 应用程序和 PowerShell cmdlet。以下是 Get-Help about_Automatic_Variables 中的文字:

    $?

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

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

    【讨论】:

    • 这应该是公认的答案。也许晚了一天?无论哪种方式,都有更多有用和有价值的信息。
    【解决方案2】:

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

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

    【讨论】:

    • 这看起来可以完美运行,但是一旦它满足特定标准,我很难让它输出到日志中。我有数千条记录要修改,所以我想把它转储到一个文件中,然后再查看它。谢谢。
    • 你能用你希望日志的样子更新你的问题吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 2014-03-21
    • 2020-08-20
    相关资源
    最近更新 更多