web-dev-qa-db-ja.com

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

どうすればこれを回避できますか?プロセスが利用できない場合や実行中でない場合に通知を受け取りたい場合。

47
Jake

コマンドに-ErrorAction SilentlyContinueを追加します。

エラーではなく、未処理の例外である場合は、例外をキャッチするために-EV Err -EA SilentlyContinueを追加する必要があります。 (EAErrorActionのエイリアスです)

次に、$Err[0]を見て、スクリプトのエラーを評価できます。

52
Bart De Vos

短い回答:コードの先頭に$ErrorActionPreference = 'SilentlyContinue'を追加すると、すべてのコマンドに-ErrorAction SilentlyContinueを追加する必要がなくなります

長い答え:https://www.gitbook.com/book/devopscollective/the-big-book-of-powershell-error -handling/details

15
Tinman