2011-12-05 45 views
51

私のPowerShellスクリプトは、存在しないサーバー(私の場合は "bla")用にSQL Serverオブジェクトを作成しようとすると、PowerShellエラーが多く赤色で表示されます。Powershell:エラーがスクリプトに表示されないようにするにはどうすればよいですか?

私のスクリプトは、このような呼び出しの後に$?の値をチェックし、エラーを表示して記録するので、PowerShellエラーのいくつかの行も表示されないようにしたいと思います。

スクリプト用に表示されているものを無効にするにはどうすればよいですか?

答えて

79

あなたにはいくつかのオプションがあります。最も簡単な設定は、ErrorActionの設定を使用することです。

-Erroractionは、すべてのコマンドレットの汎用パラメータです。無視したい特別なコマンドがある場合は、-erroraction 'silentlycontinue'を使用できます。このコマンドは、基本的には、そのコマンドによって生成されたすべてのエラーメッセージを無視します。あなたはまた、(PowerShellで3+)Ignore値を使用することができます。

SilentlyContinueというとは異なり、$エラー自動変数にエラーメッセージを追加しません無視します。スクリプト内のすべてのエラーを無視する場合は、変数$ErrorActionシステムを使用して同じことを行うことができます

$ErrorActionPreference= 'silentlycontinue'

は、詳細はabout_CommonParametersを参照してください。 1つの終了エラーするためのメカニズムと非終了エラーのための別のメカニズム:

+7

は、システム変数を設定する場合は、トリックです。 –

12

Windows PowerShellは、エラーを報告するための2つのメカニズムを提供します。

内部CmdLetsコードは、コマンドレットが入力オブジェクトを処理し続けることを許可しない、または許可しないエラーが発生した場合にThrowTerminatingErrorメソッドを呼び出すことができます。スクリプトライターは例外を使用してこれらのエラーをキャッチできます。

EX:

try 
{ 
    Your database code 
} 
catch 
{ 
    Error reporting/logging 
} 

内部レットコードは、コマンドレットは、入力オブジェクトの処理を続けることができる場合、非終端エラーを報告するWriteErrorメソッドを呼び出すことができます。スクリプト作成者は、-ErrorActionオプションを使用してメッセージを非表示にするか、$ErrorActionPreferenceを使用してスクリプトの動作全体を設定できます。

6

[system.net.dns]を使用してホスト名を解決しようとすると、同様の問題が発生しました。 IPが解決されなかった場合、Netは終了エラーを投げました。 終了エラーを防ぎ、出力の制御を保持するために、TRAPを使用して関数を作成しました。

E.G.

Function Get-IP 
{PARAM ([string]$HostName="") 
PROCESS {TRAP 
      {"" ;continue} 
      [system.net.dns]::gethostaddresses($HostName) 
     } 
} 
-1

あなたが抑制コマンドレットのPowerShellのにErrorMessageをしたいが、それでもエラーをキャッチしたい、使い「-ErrorAction 『をsilentlyStop』」

+0

このような操作はありません。停止アクションがあるのにもかかわらず。 –

関連する問題