$ LASTEXITCODE hoàn toàn dành cho các chương trình dòng lệnh để trả lại trạng thái của chúng. Cmdlets được tích hợp vào PS, chẳng hạn như Remove-item trả về lỗi của chúng theo 3 cách. Đối với cảnh báo, họ viết thư (hoặc các đối tượng .NET khác) vào "dòng cảnh báo". Trong PSv3 có một cách đơn giản để chuyển hướng luồng đó tới một tệp: cmdlet blah blah blah 3>warning.out
. Thứ hai là thông qua luồng lỗi. Luồng đó có thể được chuyển hướng cũng như ... 2>error.out
hoặc các lỗi thông thường hơn bị bắt với try/catch hoặc trap hoặc được ghi vào một biến với tham số -ErrorVariable (xem help about_commonparameters
). Cách thứ ba là các lỗi được "ném". Trừ khi bị bắt (try/catch hoặc trap), một lỗi được ném sẽ khiến kịch bản chấm dứt. Lỗi phổ biến thường là các lớp con của lớp .NET system.Management.Automation.ErrorRecord
. ErrorRecord cung cấp nhiều thông tin hơn về lỗi hơn mã trả về.
Nếu xóa mục không thành công do lỗi không tìm thấy tệp, nó ghi System.Management.Automation.ItemNotFoundException
vào luồng lỗi. Sử dụng try/catch, bạn có thể lọc lỗi cụ thể hoặc các lỗi cụ thể khác từ mục xóa. Nếu bạn chỉ cần gõ lệnh PS từ dòng lệnh, bạn có thể nhập $error[0]|select-object *
để nhận được nhiều thông tin về lỗi cuối cùng.
Bạn có thể làm điều này:
try {
Remove-Item -Recurse -Force C:\users\bkp 2>&1
} catch {
# oops remove-item failed. Write warning then quit
# replace the following with what you want to do
write-warning "Remove-item encounter error: $_"
return # script failed
}
Nguồn
2013-07-04 03:53:40
Bạn chỉ có thể kiểm tra biến lỗi $. Điều này có chứa tất cả các lỗi gặp phải trong phiên của bạn, cũng lên đến một điểm vì nó có một giới hạn về cấp phát bộ nhớ tôi tin. –