2010-01-17 30 views
34

Làm cách nào để chạy tệp thực thi trong PowerShell và thông qua câu lệnh if xác định liệu thành công đó có thành công hay không?Gọi exe từ PowerShell và nhận phản hồi về thành công hay thất bại

Cụ thể hơn là tôi đang cố gắng để có được devenv.exe để xây dựng một giải pháp từ một kịch bản PowerShell và tôi cần phải biết liệu nó đã thành công hay thất bại. Bởi thất bại, tôi có nghĩa là xây dựng đã thất bại và tôi giả devenv đang gửi một cái gì đó để vỏ (có thể trong dòng stderr?)

Tôi đã cố gắng sử dụng &, Invoke-ExpressionInvoke-Item và quản lý để có được tất cả trong số họ để chạy exe. Nhưng tôi không bao giờ có thể nhận được phản hồi về thành công/thất bại.

+0

Có một lý do tại sao bạn không sử dụng msbuild.exe để xây dựng các giải pháp thay vì devenv.exe? – Filburt

+1

Lý do duy nhất là tôi không đủ thông thạo trong việc sử dụng msbuild. Tôi có một máy xây dựng xây dựng các giải pháp của tôi nhưng tôi không biết làm thế nào để tái sử dụng các định nghĩa xây dựng cho máy địa phương của tôi: | – urig

+3

Nếu bạn muốn thử đây là một tham chiếu đến cách sử dụng msbuild để xây dựng các giải pháp: http://msdn.microsoft.com/en-us/library/z7f65y0d.aspx – Filburt

Trả lời

59

Bạn đã thử sử dụng biến số $LASTEXITCODE chưa? Nó sẽ chứa mã thoát của .exe cuối cùng đã được gọi.

+2

Điều đó đã làm điều đó. $ lastexitcode -eq 0 khi thành công, 1 khi không thành công. :) – urig

+0

Không hoạt động. Biến trống. –

+0

Hoạt động tương tác tuyệt vời. Tuy nhiên, tôi muốn để cho dấu nhắc cho biết lệnh cuối cùng có thành công hay không; '$ LastExitCode' chỉ thay đổi khi chạy thực thi, vì các hàm và CmdLets không có“ mã thoát ”; việc nhắc nhở đó có thể gây hiểu nhầm, bởi vì tôi không thể phán xét liệu mã thoát có xuất phát từ câu lệnh cuối cùng hay không. Tôi muốn CmdLets luôn đặt lại biến này. –

2
.\YOUREXE.exe 
if($LASTEXITCODE eq 0) 
{ 
    Write-Host "The last PS command executed successfully" 
} 
else 
{ 
    Write-Host "The last PS command failed" 
} 
Các vấn đề liên quan