วิธีการละเว้นข้อผิดพลาดใน Powershell และปล่อยให้มันดำเนินต่อไป?


42

ฉันกำลังพยายามดูว่ากระบวนการทำงานบนเซิร์ฟเวอร์หลายเครื่องหรือไม่แล้วจัดรูปแบบลงในตาราง

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

นั่นเป็นส่วนที่ง่าย - เมื่อกระบวนการไม่มีอยู่หรือหากเซิร์ฟเวอร์ไม่พร้อมใช้งาน PowerShell จะแสดงข้อผิดพลาดที่น่าเกลียดขนาดใหญ่ทำให้โต๊ะยุ่งและไม่ต่อ ตัวอย่าง

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

ฉันจะรับสิ่งนี้ได้อย่างไร หากฉันยังต้องการรับการแจ้งเตือนหากกระบวนการไม่พร้อมใช้งานหรือกำลังรันอยู่

คำตอบ:


46

เพิ่ม-ErrorAction SilentlyContinueไปยังคำสั่งของคุณ

เมื่อไม่ใช่ข้อผิดพลาด แต่เป็นข้อยกเว้นที่ไม่สามารถจัดการได้คุณควรเพิ่ม-EV Err -EA SilentlyContinueเพื่อตรวจสอบข้อยกเว้น ( EAเป็นนามแฝงสำหรับErrorAction)

จากนั้นคุณสามารถประเมินข้อผิดพลาดในสคริปต์ของคุณโดยดูที่ $Err[0]


ฉันกลัวว่าไม่ได้ผลเว้นแต่ฉันจะติดมันผิดที่ get-process -ComputerName server1, server2, server3 -name explorer --ErrorAction SilentlyContinue | ชื่อกระบวนการเลือกวัตถุชื่อเครื่อง
Jake

เพิ่มget-processหรือดูคำตอบที่อัปเดตของฉันด้านบน
Bart De Vos

13

คำตอบสั้น ๆ : เพิ่ม$ErrorActionPreference = 'SilentlyContinue'ที่จุดเริ่มต้นของรหัสของคุณเพื่อให้คุณไม่จำเป็นต้องเพิ่ม-ErrorAction SilentlyContinueในทุกคำสั่ง

คำตอบยาว: https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details


1
สังเกตความแตกต่าง: 'ดำเนินการต่อ' (การตั้งค่าเริ่มต้น) ดำเนินการต่อ แต่เขียนข้อผิดพลาดไปยังคอนโซล (ซึ่ง op ดูเหมือนว่าต้องการที่จะกำจัดถ้าฉันอ่านเขาอย่างถูกต้อง) 'SilentlyContinue' ไม่แสดงข้อความแสดงข้อผิดพลาดทั้งหมด
Frederik Struck-Schøning


"เพิ่ม $ ErrorActionPreference = 'SilentlyContinue' ที่จุดเริ่มต้นของรหัสของคุณ" ---> สิ่งนี้ช่วยได้จริงๆขอบคุณมากสำหรับความช่วยเหลือของคุณและทำให้มันพร้อมใช้งานบนอินเทอร์เน็ต
Nishant
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.