Làm thế nào để bỏ qua một lỗi trong Powershell và để nó tiếp tục?


42

Tôi đang cố gắng xem liệu một quá trình đang chạy trên nhiều máy chủ và sau đó định dạng nó thành một bảng.

get-process -ComputerName server1,server2,server3 -name explorer | Select-Object processname,machinename

Đó là phần dễ dàng - Khi quy trình không tồn tại hoặc nếu máy chủ không khả dụng, powershell sẽ xuất hiện một lỗi lớn xấu xí, làm rối bảng và không tiếp tục. Thí dụ

Get-Process : Couldn't connect to remote machine.At line:1 char:12 + get-process <<<<  -ComputerName server1,server2,server3 -name explorer | format-table processname,machinename
+ CategoryInfo          : NotSpecified: (:) [Get-Process], InvalidOperatio   nException    + FullyQualifiedErrorId : System.InvalidOperationException,Microsoft.Power   Shell.Commands.GetProcessCommand

Làm thế nào để tôi có được xung quanh này? Nếu tôi vẫn muốn nhận thông báo nếu quy trình không khả dụng hoặc Đang chạy.

Câu trả lời:


46

Thêm -ErrorAction SilentlyContinuevào lệnh của bạn.

Khi đó không phải là một lỗi, mà là một Ngoại lệ chưa được xử lý, bạn nên thêm -EV Err -EA SilentlyContinuevào, để bắt ngoại lệ. ( EAlà bí danh cho ErrorAction)

Sau đó, bạn có thể đánh giá lỗi trong tập lệnh của mình bằng cách xem $Err[0]


Tôi sợ rằng nó không hoạt động trừ khi tôi dán nó sai chỗ. get-process -ComputerName server1, server2, server3 -name explorer -ErrorAction SilentlyContinue | Tên quy trình chọn đối tượng, tên máy móc
Jake

Thêm nó vào get-processhoặc xem câu trả lời cập nhật của tôi ở trên.
Bart De Vos

13

Câu trả lời ngắn: Thêm vào $ErrorActionPreference = 'SilentlyContinue'lúc bắt đầu mã của bạn để bạn không cần thêm -ErrorAction SilentlyContinuevào mỗi lệnh

Câu trả lời dài: https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details


1
Lưu ý sự khác biệt: 'Tiếp tục' (cài đặt mặc định) tiếp tục thực thi, nhưng ghi lỗi vào bảng điều khiển (mà op dường như muốn thoát khỏi, nếu tôi đọc chính xác anh ta). 'SilentlyContinue' loại bỏ hoàn toàn tất cả các thông báo lỗi.
Frederik Struck-Schøning


"Thêm $ ErrorActionPreference = 'SilentlyContinue' khi bắt đầu mã của bạn" ---> Điều này thực sự hữu ích vì cảm ơn rất nhiều vì sự giúp đỡ của bạn và cung cấp nó trên Internet.
Nishant
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.