2014-01-15 68 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]的值以查看在您的命令運行後它是否已填充。