Назад | Перейти на главную страницу

Как игнорировать ошибку в Powershell и позволить ей продолжаться?

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

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

Как мне обойти это? Если я все еще хочу получать уведомление, если процесс недоступен или выполняется.

Добавить -ErrorAction SilentlyContinue к вашей команде.

Если это не ошибка, а необработанное исключение, следует добавить -EV Err -EA SilentlyContinue, чтобы поймать исключение. (EA это псевдоним для ErrorAction)

Затем вы можете оценить ошибку в своем скрипте, посмотрев на $Err[0]

Короткий ответ: Добавить $ErrorActionPreference = 'SilentlyContinue' в начале вашего кода, поэтому вам не нужно добавлять -ErrorAction SilentlyContinue каждой команде

Длинный ответ: https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error-handling/details