Bagaimana cara mengabaikan kesalahan di Powershell dan membiarkannya berlanjut?

42

Saya mencoba untuk melihat apakah suatu proses sedang berjalan di beberapa server dan kemudian memformatnya menjadi sebuah tabel.

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

Itu bagian yang mudah - Ketika proses tidak ada atau jika server tidak tersedia, PowerShell mengeluarkan kesalahan besar, mengacaukan tabel dan tidak melanjutkan. Contoh

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

Bagaimana saya mengatasi ini? Jika saya masih ingin mendapat pemberitahuan jika proses tidak tersedia atau Berjalan.

Jake
sumber

Jawaban:

46

Tambahkan -ErrorAction SilentlyContinueke perintah Anda.

Ketika itu bukan kesalahan, tapi Pengecualian tidak tertangani, Anda harus menambahkan -EV Err -EA SilentlyContinue, untuk menangkap pengecualian. ( EAadalah alias untuk ErrorAction)

Anda kemudian dapat mengevaluasi kesalahan dalam skrip Anda, dengan melihat $Err[0]

Bart De Vos
sumber
Saya khawatir itu tidak akan berhasil kecuali saya menempelkannya di tempat yang salah. get-process -ComputerName server1, server2, server3 -nama explorer -ErrorAction SilentlyContinue | Select-Object processname, machinename
Jake
Tambahkan get-processatau lihat jawaban saya yang diperbarui di atas.
Bart De Vos
13

Jawaban singkat: Tambahkan $ErrorActionPreference = 'SilentlyContinue'di awal kode Anda sehingga Anda tidak perlu menambahkan -ErrorAction SilentlyContinueke setiap perintah

Jawaban panjang: https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details

Tinman
sumber
1
Perhatikan perbedaannya: 'Lanjutkan' (pengaturan default) melanjutkan eksekusi, tetapi menulis kesalahan ke konsol (yang sepertinya ingin dihapus, jika saya membacanya dengan benar). 'SilentlyContinue' menekan semua pesan kesalahan sepenuhnya.
Frederik Struck-Schøning
"Tambahkan $ ErrorActionPreference = 'SilentlyContinue' pada awal kode Anda" ---> Ini sangat membantu, terima kasih banyak atas Bantuan Anda dan membuatnya tersedia di Internet.
Nishant