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 -name explorer -ErrorAction SilentlyContinue | 選択-オブジェクトのProcessNameの、マシン名
ジェイク

追加するget-processか、上記の更新された回答をご覧ください。
バートデヴォス

13

短い答え: 追加$ErrorActionPreference = 'SilentlyContinue'あなたが追加する必要はありませんので、あなたのコードの開始時に-ErrorAction SilentlyContinueすべてのコマンドに

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


1
違いに注意してください: 'Continue'(デフォルト設定)は実行を継続しますが、コンソールにエラーを書き込みます(私が彼を正しく読んだ場合は、このopを取り除きたいようです)。'SilentlyContinue'は、すべてのエラーメッセージを完全に抑制します。
フレデリック・ストライク・シェーニング


「コードの先頭に$ ErrorActionPreference = 'SilentlyContinue'を追加してください。」--->これは本当に役に立ちました。ヘルプとインターネットでの公開に感謝します。
ニシャント
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.