2013-04-09 91 views
3

我想用powershell啓動我的服務,但目前失敗。我不知道它爲什麼會失敗,但這不是重點。當試圖啓動主機時,我沒有得到正確的退出代碼,所以我的自動部署失敗了。如何在命令失敗時返回錯誤代碼?

我試圖做的是:

$cmd = "$folder" + "\MyService.exe" 
try 
{ 
    & $cmd stop 
    & $cmd uninstall 
    & $cmd install 
    & $cmd start 
} 
catch 
{ 
    Write-Host "Error: Update of service failed" 
    exit 1 
} 

start命令失敗,出現以下的messge:

Topshelf.Hosts.StartHost Error: 0 : The service failed to start., System.InvalidOperationException: Cannot start service MyService on computer '.'. ---> System.ComponentModel.Win32Exception: The service cannot be started, either because it is disabled or because it has no enabled devices associated with it 
    --- End of inner exception stack trace --- 
    at System.ServiceProcess.ServiceController.Start(String[] args) 
    at System.ServiceProcess.ServiceController.Start() 
    at Topshelf.Runtime.Windows.WindowsHostEnvironment.StartService(String serviceName) 
    at Topshelf.Hosts.StartHost.Run() 

,我從來沒有進入我的PowerShell腳本的catch語句。

UPDATE:

請注意,我詢問如何獲取方法的catch語句,而不是解決實際的異常。我已經解決了實際的異常,但是如果它失敗了,我希望在未來有更好的反饋,那就是要執行catch語句,而不是在出錯的情況下執行。

回答

3

try/catch在PowerShell中無法使用exe。 經過myservice.exe調用您需要檢查自動變量$LastExitCode。 嘗試類似這樣:

$out = & $cmd start 
if ($LastExitCode -ne 0) # if exe returns 0 on success, if not change the condition accordingly 
{ 
    "ERROR: $out" 
    return # to exit script or do something else. 
} 
+0

我也試過,以及它沒有工作。我不認爲最後的退出代碼設置正確。 – 2013-04-09 10:32:49

+0

但是'$ LastExitCode'在錯誤之後得到了一些值? – 2013-04-09 10:34:26

+0

'$ LastExitCode'的值被設置爲0. – 2013-04-09 10:49:04

相關問題