Bạn đang đi chệch hướng ở đây.
Bạn đã có một thông báo lỗi lớn. Tại sao bạn lại muốn viết mã kiểm tra $?
rõ ràng sau mỗi lệnh ? Điều này cực kỳ cồng kềnh và dễ xảy ra lỗi. Giải pháp chính xác là dừng kiểm tra$?
.
Thay vào đó, hãy sử dụng cơ chế tích hợp của PowerShell để thổi bay cho bạn. Bạn kích hoạt nó bằng cách đặt tùy chọn lỗi ở mức cao nhất:
$ErrorActionPreference = 'Stop'
Tôi đặt điều này ở đầu mỗi kịch bản tôi từng viết và bây giờ tôi không cần phải kiểm tra $?
. Điều này làm cho mã của tôi đơn giản hơn và đáng tin cậy hơn.
Nếu bạn gặp phải tình huống mà bạn thực sự cần phải tắt hành vi này, bạn có thể catch
báo lỗi hoặc chuyển một cài đặt cho một chức năng cụ thể bằng cách sử dụng chung -ErrorAction
. Trong trường hợp của bạn, bạn có thể muốn quá trình của mình dừng lại ở lỗi đầu tiên, bắt lỗi và sau đó ghi lại lỗi đó.
Lưu ý rằng điều này không xử lý trường hợp khi các tệp thực thi bên ngoài bị lỗi (thoát mã khác không, theo cách thông thường), vì vậy bạn vẫn cần kiểm tra $LASTEXITCODE
xem bạn có gọi bất kỳ lệnh nào không. Mặc dù có hạn chế này, thiết lập vẫn tiết kiệm rất nhiều mã và công sức.
Độ tin cậy bổ sung
Bạn cũng có thể muốn xem xét sử dụng chế độ nghiêm ngặt :
Set-StrictMode -Version Latest
Điều này ngăn PowerShell tiếp tục âm thầm khi bạn sử dụng một biến không tồn tại và trong các tình huống kỳ lạ khác. (Xem -Version
thông số để biết chi tiết về những gì nó hạn chế.)
Việc kết hợp hai cài đặt này làm cho PowerShell trở thành ngôn ngữ xử lý lỗi nhanh hơn nhiều, giúp việc lập trình trong đó dễ dàng hơn rất nhiều.