$ LastExitCode不提供结果

mjp*_*eep 3 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
    }
Run Code Online (Sandbox Code Playgroud)

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

Warning: The command completed successfully but no settings have been modified.
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

迈克尔

好的,我收到了很好的回复,现在我正在使用以下代码.我必须修改数千个对象,它们都将处于不同的错误代码,因此我需要能够将任何条件写入日志文件.我在整个脚本中都有一堆环境变量,所以最后,我要把"User Passed/Failed"$ 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"
Run Code Online (Sandbox Code Playgroud)

tom*_*ard 10

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

$?

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

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

  • 这应该是公认的答案。也许晚了一天?无论哪种方式,更多有用和有价值的信息。 (2认同)