Я пытаюсь увидеть, выполняется ли процесс на нескольких серверах, а затем отформатировать его в таблицу.
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