Anda keluar jalur di sini.
Anda sudah mendapatkan pesan kesalahan besar yang bagus. Mengapa Anda ingin menulis kode yang memeriksa $?
secara eksplisit setelah setiap perintah ? Ini sangat rumit dan rawan kesalahan. Solusi yang tepat adalah berhenti mengecek$?
.
Sebagai gantinya, gunakan mekanisme bawaan PowerShell untuk meledakkannya untuk Anda. Anda mengaktifkannya dengan mengatur preferensi kesalahan ke level tertinggi:
$ErrorActionPreference = 'Stop'
Saya meletakkan ini di bagian atas setiap skrip yang pernah saya tulis, dan sekarang saya tidak perlu memeriksanya $?
. Ini membuat kode saya jauh lebih sederhana dan lebih dapat diandalkan.
Jika Anda mengalami situasi di mana Anda benar - benar perlu menonaktifkan perilaku ini, Anda dapat melakukan catch
kesalahan atau meneruskan pengaturan ke fungsi tertentu menggunakan common -ErrorAction
. Dalam kasus Anda, Anda mungkin ingin proses Anda berhenti pada kesalahan pertama, menangkap kesalahan, dan kemudian mencatatnya.
Perhatikan bahwa ini tidak menangani kasus ketika executable eksternal gagal (kode keluar bukan nol, secara konvensional), jadi Anda masih perlu memeriksa $LASTEXITCODE
apakah Anda memanggil. Terlepas dari batasan ini, pengaturannya masih menyimpan banyak kode dan upaya.
Keandalan tambahan
Anda mungkin juga ingin mempertimbangkan untuk menggunakan mode ketat :
Set-StrictMode -Version Latest
Ini mencegah PowerShell melanjutkan secara diam-diam saat Anda menggunakan variabel yang tidak ada dan dalam situasi aneh lainnya. (Lihat -Version
parameter untuk detail tentang apa yang dibatasi.)
Menggabungkan dua pengaturan ini membuat PowerShell lebih dari bahasa gagal-cepat, yang membuat pemrograman di dalamnya jauh lebih mudah.