2008-10-14 17 views
18

Trong một tập lệnh, khi một lệnh cho phép hoặc các câu lệnh thực thi khác bị lỗi, có loại cơ chế try/catch nào để phục hồi từ các lỗi này không? Tôi đã không chạy trên một trong các tài liệu hướng dẫn.Windows Powershell có cơ chế xử lý lỗi/thử hoặc lỗi khác không?

+10

Lưu ý cho người đọc trong tương lai: PowerShell v2 hiện đã xuất hiện và hỗ trợ Try/Catch/Finally. – JasonMArcher

Trả lời

8

Bạn sử dụng khối Trap [exception-type] {} trước mã bạn muốn xử lý ngoại lệ.

+0

+0 Câu trả lời thực tế giờ đây là thử/nắm bắt trong PowerShell phiên bản 2 trở lên như được ghi chú trong nhận xét về câu hỏi. I + 1d t @ Mark Ingram thay vì tôi coi đây là một bản dup mà không thêm nhiều. (Có, tôi biết điều này đã được một thời gian dài trước đây nhưng tôi đã bỏ lỡ nhận xét về câu hỏi lần đầu tiên và đây là lần bỏ phiếu cao nhất) –

7

Tôi đã viết về điều này trong cột Tạp chí TechNet của tôi (technetmagazine.com, nếu bạn quan tâm).

Đầu tiên, PowerShell v2 sẽ có tiêu chuẩn Thử ... Bắt, thật tuyệt.

Vỏ hiện tại (v1) có hỗ trợ cho cấu trúc bẫy {}. Những điều này phải được xác định trước khi xảy ra ngoại lệ. Ngoài ra, hầu hết các lệnh ghép ngắn yêu cầu tham số "STOP" -EA để chúng tạo ra một ngoại lệ có thể tra cứu được. Bẫy có thể được định nghĩa trong bất kỳ phạm vi nào và sẽ "bong bóng" cho đến khi bị giữ lại hoặc cho đến khi chúng đạt đến phạm vi toàn cầu (vỏ).

Khi kết thúc bẫy, hãy thực hiện Tiếp tục để quay lại dòng mã tiếp theo trong cùng phạm vi với bẫy hoặc thực thi lệnh Break để thoát khỏi phạm vi hiện tại và gửi ngoại lệ lên.

+1

+1 cho '-ErrorAction" STOP "' – mbx

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