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-이름 탐색기 -ErrorAction SilentlyContinue | 객체 선택 processname, machinename
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
차이점은 'Continue'(기본 설정)는 실행을 계속하지만 콘솔에 오류를 기록합니다 (올바르게 읽으면 제거하려는 것처럼 보입니다). 'SilentlyContinue'는 모든 오류 메시지를 완전히 억제합니다.
Frederik Struck-Schøning


"코드 시작 부분에 $ ErrorActionPreference = 'SilentlyContinue'추가"---> 도움이되어 정말 감사하고 인터넷에서 사용할 수있게 해주었습니다.
Nishant
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.