2011-12-15 18 views
7

Trong một dấu nhắc lệnh, Hãy thử điều này:Powershell có quên đặt ERRORLEVEL về lỗi phân tích cú pháp không?

PowerShell aaa

vang errorlevel là% errorlevel%

Powershell sẽ thất bại (với một lỗi). Bạn cũng sẽ thấy "ErrorLevel là 1". Điều này là do nó chạy aaa làm tập lệnh, tạo ra lỗi không được xử lý, đặt lỗi.

Tuy nhiên, bây giờ thử điều này:

PowerShell '

vang errorlevel là% errorlevel%

Powershell sẽ thất bại (với một lỗi). Lần này, bạn cũng sẽ thấy "ErrorLevel là 0".

Tôi nhận ra đó là một vấn đề khác. Powershell thậm chí sẽ nói đó là ParserError và đó là do tôi đã làm hỏng các đối số dòng lệnh. Tuy nhiên, đó không phải là mát mẻ.

Tôi không rõ lý do tại sao nó hoạt động theo cách này. Tôi đoán đây là một sự giám sát. Các chương trình khác hiện có lỗi thiết lập bỏ sót trên thất bại, nhưng trong trường hợp này nó như thể họ đã đi nửa chừng. Nó thậm chí còn đặt nó thành 0 ở đây trái ngược với việc không đặt nó ở tất cả.

+1

Một chỉnh sửa nhỏ: không có cách nào để ứng dụng bảng điều khiển không đặt mức lỗi. Điều này chỉ có thể cho các lệnh nội bộ. –

+0

Máy chủ Windows Script (cscript) có vấn đề tương tự. Có lẽ MS thấy Powershell và WSH là các lựa chọn thay thế thay vì các trình khách của trình bao lệnh. –

+1

Một giải pháp thay thế cho kịch bản Powershell/WSH của bạn là trả về một giá trị khác không về thành công; -1 có thể là một lựa chọn tốt. –

Trả lời

1

Hmm Tôi nghĩ rằng tôi đồng ý rằng lỗi phân tích cú pháp sẽ đặt mã trả về thành 0 không. Tôi đề nghị nộp đơn này tại trang web kết nối Powershell. http://connect.microsoft.com/PowerShell

+0

Tôi nghĩ rằng chúng tôi đã chọn bộ não cộng đồng càng nhiều càng tốt trên cái này. Tôi không ngại phải đối phó với mã trả về "0" nếu có lý do chính đáng, nhưng tôi cho rằng hành vi của tình huống này không được xác định một cách có chủ ý. –

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