Як ігнорувати помилку в Powershell і дозволити її продовжувати?


42

Я намагаюся побачити, чи працює процес на декількох серверах, а потім відформатувати його в таблицю.

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

Це найпростіша частина - коли процесу не існує або якщо сервер недоступний, powerhell видає велику потворну помилку, заплутує таблицю і не продовжується. Приклад

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-explorer -ErrorAction SilentlyContinue | Select-Object ім'я процесу, ім'я машини
Jake

Додайте його get-processабо подивіться на мою оновлену відповідь вище.
Барт Де Вос

13

Коротка відповідь: додайте $ErrorActionPreference = 'SilentlyContinue'на початку коду, щоб не потрібно було додавати -ErrorAction SilentlyContinueдо кожної команди

Довга відповідь: https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details


1
Зверніть увагу на різницю: "Продовжити" (налаштування за замовчуванням) продовжує виконання, але записує помилки в консоль (який оп, здається, хоче позбутися, якщо я прочитав його правильно). 'SilentlyContinue' повністю пригнічує всі повідомлення про помилки.
Фредерік Струк-Шонінг


"Додати $ ErrorActionPreference = 'SilentlyContinue' на початку вашого коду" ---> Це дійсно допомогло, тому дуже дякую за вашу допомогу та зробивши її доступною в Інтернеті.
Нішант
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.