2014-01-15 59 views
0

我想看看我是否可以得到一些错误代码的帮助。我最后的脚本是设置邮箱的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种情况的错误代码。 (它的工作,它失败了,然后上面那个工作,但没有改变。)我似乎无法找到任何这样的例子,并会真正感谢一些建议。

谢谢。

Michael

好吧,我得到了很好的回应,现在我使用下面的代码。我必须修改数千个对象,并且它们将全部处于不同的错误代码,所以我需要能够将任何条件写入日志文件。我有一大堆的整个脚本中的环境变量,所以最后,我要放一个“传递的用户/失败” $ EmailAddress的$显示名称等等.....

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" 

回答

3

试试这个。它应该如果成功以0退出,1如果成功的话,但没有变化,2,如果它失败:

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

这看起来好像可以完美运行,但一旦达到特定标准,我就很难将其输出到日志中。我有数千条记录需要修改,所以我想把它转储到一个文件中,然后再进行检查。谢谢。 – mjpbeep

+0

你可以用你想要的日志来更新你的问题吗? – mjolinor

5

$ LastExitCode拥有的Win32应用程序,而不是PowerShell命令退出代码做。你可能会更好地检查$?为真或假。 $?变量可以报告Win32应用程序和PowerShell cmdlet。以下是Get-Help about_Automatic_Variables的文本:

$?

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

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