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.

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]


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


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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.