2015-02-25 14 views
6

MyScript.ps1:Làm cách nào để đặt mã thoát khi ném một ngoại lệ?

exit 1 

MyThrow.ps1:

throw "test" 

Thực hiện trong PowerShell:

& ".\MyScript.ps1" 
Write-Host $LastExitCode # Outputs 1 

Clear-Variable LastExitCode 

& ".\MyThrow.ps1" 
Write-Host $LastExitCode # Outputs nothing 

Làm thế nào để thiết lập một mã thoát đúng đắn khi ném một ngoại lệ?

+0

Tại sao không phải 'try/catch' lệnh, hoặc xóa' $ lastexitcode' trước lệnh và kiểm tra nếu nó là '$ null' sau đó? – arco444

+0

Cuối cùng, tập lệnh không được thực hiện từ PowerShell mà từ trình lập lịch tác vụ. Hiện tại nếu kịch bản lệnh ném ngoại lệ, mã thoát trong trình lên lịch tác vụ là 0. –

+0

Bạn có quyền truy cập vào tập lệnh không? Giải pháp tốt nhất sẽ là bẫy đúng các ngoại lệ ở đó và thoát ra với một từ bắt, hoặc thiết lập một mã để thoát với ở cuối – arco444

Trả lời

8

Bạn không. Khi bạn ném một ngoại lệ, bạn mong đợi ai đó xử lý nó. Một người nào đó sẽ là người chấm dứt thực hiện và đặt mã thoát. Ví dụ:

try { 
    & ".\MyThrow.ps1" 
} catch { 
    exit 1 
} 

Nếu không có gì để bắt ngoại lệ của bạn, bạn không nên ném nó ở nơi đầu tiên, nhưng lối ra ngay lập tức (với một mã lối ra thích hợp) là.

+0

Điều gì sẽ xảy ra nếu bạn muốn thực hiện cố gắng bắt cuối cùng? Tôi sẽ giả sử nếu bạn kết thúc bên trong bắt thì bạn sẽ không bao giờ đánh cuối cùng vì lối ra. – BigMiner

+3

@BigMiner Giả định của bạn là sai. –

Các vấn đề liên quan